我想运行以下SQL查询:
SELECT
COUNT (a.status_flag) counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a
LEFT JOIN user_mst b ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4.
但它没有运行,给出了这个错误:
Column' inward_doc_tracking_hdr.Mkey'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
这里有什么问题?
我正在使用SQL-server-2005。
更新
当我运行简单的
时,我遇到了一个问题select count(status_flag) from inward_doc_tracking_hdr where to_user = 1279
我得到2分。
但是当我跑步时
SELECT COUNT (a.status_flag) counts, a.mkey, a.to_user, b.email, b.first_name + ' ' + b.last_name name FROM inward_doc_tracking_hdr a LEFT JOIN user_mst b ON a.to_user = b.mkey WHERE a.to_user = '1279' AND a.status_flag = '4' Group by a.mkey, a.to_user, b.email, b.first_name,b.last_name
它显示了我的2行。
为什么?答案 0 :(得分:1)
每当select
列表包含aggregate
和non aggregate
列的组合时,您需要添加Group by
列non aggregate
SELECT COUNT (a.status_flag) counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a
LEFT JOIN user_mst b ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4
Group by a.mkey, a.to_user
答案 1 :(得分:1)
通常,当您使用带有聚合的LEFT JOIN
时,您希望计算 second 表中的匹配数,而不是 first 。所以:
SELECT COUNT(b.mkey) as counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a LEFT JOIN
user_mst b
ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4
GROUP BY a.mkey, a.to_user;
您的查询版本(修复后)会返回" 1"即使b
中没有匹配的行。
答案 2 :(得分:0)
您需要使用group by on columns不包含在count()
中SELECT COUNT (a.status_flag) counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a
LEFT JOIN user_mst b ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4.
group by a.mkey, a.to_user