SQL 查询在加入时给出错误

SQL query giving error on join

我想运行下面的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.

但不是运行ning,报错:

Column 'inward_doc_tracking_hdr.Mkey' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

这里有什么问题?

我正在使用 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 行。

为什么?

每当您的 select 列表包含 aggregatenon aggregate 列的组合时,您需要添加 Group bynon 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

您需要对不包含在计数中的列使用分组依据()

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

一般来说,当您使用带有聚合的 LEFT JOIN 时,您想要计算 table 中的匹配数,而不是 第一。所以:

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;

即使 b 中没有匹配的行,您的查询版本(固定后)也会 return 计数为“1”。