Sql 如何在计数和分组过程的结果表中包括第三列
我有下面的select语句,它工作得很好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 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