Cla*_*tin 4 sql sql-server group-by count left-join
我有一个简单的SQL Server 2008数据库,有两个表,如下所示:
TableA:
(PK)"ID"
"Field"
Run Code Online (Sandbox Code Playgroud)
和
TableB:
(PK)"ID"
(FK)"ID_TableA"
"Field"
Run Code Online (Sandbox Code Playgroud)
我想选择所有字段TableA以及TableB每行中有多少对应的行TableA:
SELECT A.*,
COUNT(B."ID") as "B's number"
FROM "TableA" A
LEFT JOIN "TableB" B ON (A."ID" = B."ID_TableA")
GROUP BY A."ID", A."Field"
Run Code Online (Sandbox Code Playgroud)
这很好用,但我有这个问题:如果TableA进一步修改(假设我们必须添加另一Field2列),我必须更新SELECT上面的语句,在GROUP BY子句中包含该字段.否则我在执行操作时收到此错误:
" 列'TableA.Field2'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中 "
有没有办法避免这种情况,所以我可以修改我,TableA而不是像上面那样更新所有语句?
你可以使用它(表B中的第一个Group By,然后是表A的Join):
SELECT A.*,
COALESCE("B's number", 0) AS "B's number"
FROM "TableA" A
LEFT JOIN
( SELECT B."ID_TableA", COUNT(B."ID") as "B's number"
FROM "TableB" B
GROUP BY B."ID_TableA"
) AS B ON (A."ID" = B."ID_TableA")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4205 次 |
| 最近记录: |