Sql 如何在计数和分组过程的结果表中包括第三列

Sql 如何在计数和分组过程的结果表中包括第三列,sql,sql-server,Sql,Sql Server,我有下面的select语句,它工作得很好 SELECT status_id, COUNT(status_id) As total FROM tbl_project INNER JOIN lkp_status ON tbl_project.status_id = lkp_status.record_id GROUP BY status_id 我想在结果表中包括status_name字段,但这是不允许的: SELECT **status_name**, status_id, COUNT(statu

我有下面的select语句,它工作得很好

SELECT status_id, COUNT(status_id) As total
FROM tbl_project INNER JOIN lkp_status
ON tbl_project.status_id = lkp_status.record_id
GROUP BY status_id
我想在结果表中包括status_name字段,但这是不允许的:

SELECT **status_name**, status_id, COUNT(status_id) As total
FROM tbl_project INNER JOIN lkp_status
ON tbl_project.status_id = lkp_status.record_id
GROUP BY status_id
“因为它不包含在聚合函数或GROUP BY子句中”

但我只想有第三列,指示每个计数的状态id的名称,它可能不是唯一的:S


感谢您的建议

您需要通过将
状态_name
添加到
分组中,否则它将不允许您将其包含在
选择中。因此,假设
status\u name
属于
lkp\u status
表,您的查询应该是:

SELECT  status_id,
        status_name = (SELECT status_name FROM tbl_project Where status_id = tp.status_id)
        COUNT(status_id) As total
  FROM  tbl_project tp INNER JOIN lkp_status ON tp.status_id = lkp_status.record_id
GROUP BY status_id
SELECT s.status_name, p.status_id, COUNT(status_id) As total
FROM tbl_project p
INNER JOIN lkp_status s
ON p.status_id = s.record_id
GROUP BY s.status_name, p.status_id

如果您的查询确实有效,您应该能够将名称添加到SELECT子句和GROUPBY子句中

SELECT status_id, status_name, COUNT(status_id) As total
FROM tbl_project 
INNER JOIN lkp_status ON tbl_project.status_id = lkp_status.record_id
GROUP BY status_id, status_name

如果状态名称不唯一,这可能会给您带来令人惊讶的结果。

您不能通过将状态名称添加到组中?列
status\u NAME
是哪个表?因为在您的示例中,您将表从
lkp\u status
更改为
lkp\u project\u status
,您的状态PK真的被称为
record\u id
?为什么不干脆
状态\u id
SELECT  tp.status_name,
        a.status_id,
        a.total

FROM (  SELECT status_id, COUNT(status_id) As total
        FROM tbl_project INNER JOIN lkp_project_status
        ON tbl_project.status_id = lkp_project_status.record_id
        GROUP BY status_id) A

INNER JOIN tbl_project tp
ON a.status_id = tp.status_id