SQL查询在联接时给出错误
我想运行以下SQL查询:SQL查询在联接时给出错误,sql,sql-server-2005,Sql,Sql Server 2005,我想运行以下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. 但它没有运行,出现以下错误: 列“inquired\u doc\u tracking\u hdr.Mkey
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.
但它没有运行,出现以下错误:
列“inquired\u doc\u tracking\u hdr.Mkey”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中
这里怎么了
我正在使用SQL-server-2005
更新
当我运行simple时,我遇到了一个问题
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
它显示了两行
为什么? 每当您选择
时,列表中有聚合
和非聚合
列的组合,您需要添加分组依据
和非聚合
列
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
您需要在count()中不包括的列上使用group by
通常,当使用带有聚合的左联接时,您希望计算第二个表中的匹配数,而不是第一个表中的匹配数。因此:
即使在b
中没有匹配的行,您的查询版本(修复后)也会返回“1”计数。您需要一个GROUPBY子句。请尝试在您的语句结尾添加groupby a.mkey,a.to_user
。@jarlh:groupby
整个查询或部分查询的位置?@jarlh:谢谢,它起到了作用。。我没注意到:在我更新的问题上扑通一声。我想数一数,但不是我想的那样want@NK-这应该是一个新问题
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
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;