提问人:Shire 提问时间:1/18/2022 最后编辑:jarlhShire 更新时间:1/18/2022 访问量:74
T-SQL 分组依据:When empty ResultSet
T-SQL Group by When empty ResultSet
问:
当清空 ResultSet 和部件记录时,如何选择分组计数
表 T 架构为 列 A int,列 B int
数据演示 A 是
A B
1 11
1 2
1 Null
2 1
2 21
3 12
3 Null
数据演示 B 是
A B
2 1
2 21
3 12
3 Null
4 11
4 2
4 Null
数据演示 C 是
A B
(empty record)
我想选择这个 ResultSet
A B
1 Bcount
2 Bcount
3 Bcount
4 Bcount
我的SQL代码是
select A,Count(B) FROM T
group by A
当数据演示 A 时,我丢失了 A=4 结果
当数据演示 B 时,我丢失了 A=1 结果
当数据演示C丢失所有结果时,ResultSet为空。
答:
0赞
Ian Kenney
1/18/2022
#1
这个问题仍然不清楚,但也许你正在追求类似的东西
select v.A, count(t.b)
from (select 1 as A union select 2 union select 3 union select 4) as v
left join t on t.a = v.a
group by 1
评论
0赞
Shire
1/18/2022
完美的代码。谢谢你的回答,group by 1 更改为 group by v.A 是可以的。
1赞
LukStorms
1/18/2022
#2
您可以左联接 VALUES
SELECT V.A, COUNT(T.B) AS Total_B
FROM (VALUES (1),(2),(3),(4)) V(A)
LEFT JOIN T ON (T.A = V.A)
GROUP BY V.A
ORDER BY V.A;
或者为 A 的值创建引用表。 然后左联接到引用表。
CREATE TABLE REF_A (A INT PRIMARY KEY);
INSERT INTO REF_A (A) VALUES (1),(2),(3),(4);
SELECT A.A, COUNT(T.B) AS Total_B
FROM REF_A A
LEFT JOIN T ON (T.A = A.A)
GROUP BY A.A
ORDER BY A.A;
db<>fiddle 演示在这里
评论
0赞
Shire
1/18/2022
谢谢你的回答,伊恩·肯尼(Ian Kenney)解决了我的问题,你的代码非常优雅。
评论
SELECT dimension.A, COUNT(data.B) FROM dimension LEFT JOIN data ON data.A = dimension.A GROUP BY dimension.A
Bcount