表ABCD如何获得零数据时不存在特定字段
Group1 Class C1 A C2 A C3 B C4 C C1 A
这里我有表,即时通讯试图获得如下因素 结果
OUTPUT:(使用这种格式要求表ABCD
Group1 Class Count C1 A 2 C1 B 0 C1 C 0 C2 A 1 C2 B 0 C2 C 0 C3 A 0 C3 B 0 C3 C 1
我想要实现这个使用SQL查询。谢谢你在前进,即时通讯相当新的查询WRT甲骨文所以请帮助我的查询。
表ABCD如何获得零数据时不存在特定字段
Group1 Class C1 A C2 A C3 B C4 C C1 A
这里我有表,即时通讯试图获得如下因素 结果
OUTPUT:(使用这种格式要求表ABCD
Group1 Class Count C1 A 2 C1 B 0 C1 C 0 C2 A 1 C2 B 0 C2 C 0 C3 A 0 C3 B 0 C3 C 1
我想要实现这个使用SQL查询。谢谢你在前进,即时通讯相当新的查询WRT甲骨文所以请帮助我的查询。
您可以使用下面的查询来获取结果。这创建了每个group1
和每个class
的列表。一旦你的列表中,那么您可以在您的原始表算多少比赛:
select s.group1,
s.class,
count(d.class) tot
from
(
select distinct a.group1, c.class
from abcd a
cross join
(
select distinct class
from abcd
) c
) s
left join abcd d
on s.group1 = d.group1
and s.class = d.class
group by s.group1, s.class
order by s.group1, s.class;
此作品在SQL Server
SELECT O.*
,CASE WHEN I.[Group1] IS NULL THEN 0 ELSE 1 END AS Cnt
FROM Table1 I RIGHT JOIN
(
SELECT DISTINCT T1.[Group1],T2.[Class] FROM Table1 T1
CROSS JOIN Table1 T2
) O ON I.[Group1] = O.[Group1] AND I.[Class] = O.[Class]
编辑
SELECT O.*
,SUM(CASE WHEN I.[Group1] IS NULL THEN 0 ELSE 1 END) AS Cnt
FROM Table1 I RIGHT JOIN
(
SELECT DISTINCT T1.[Group1],T2.[Class] FROM Table1 T1
CROSS JOIN Table1 T2
) O ON I.[Group1] = O.[Group1] AND I.[Class] = O.[Class]
GROUP BY O.[Group1],O.[Class]
首先感谢代码片段,但我想这只适用于计数为0或1的情况。如果计数增加,请退出我 – user2568275
@ user2568275检查更新的答案 – bvr
不知道我理解正确你的问题,但我想你想要的东西喜欢这样的:
with all_combinations as (
select distinct g.group1, c.class
from (
select group1
from foobar
) g
cross join (
select class
from foobar
) c
)
select ac.group1, ac.class, count(f.group1)
from all_combinations ac
left join foobar f on f.group1 = ac.group1 and f.class = ac.class
group by ac.group1, ac.class
order by ac.group1, ac.class
SQLFiddle演示:http://sqlfiddle.com/#!4/9be9f/1
WITH grp AS (
SELECT DISTINCT grp AS grp FROM abcd
)
, cls AS (
SELECT DISTINCT cls AS cls FROM abcd
)
SELECT g.grp, c.cls
, COALESCE(a.cnt, 0) AS the_count
FROM grp g
FULL OUTER JOIN cls c ON 1=1
LEFT JOIN (
SELECT DISTINCT grp, cls, COUNT(*) as cnt
FROM abcd
GROUP BY grp,cls
) a ON a.grp = g.grp AND a.cls = c.cls
ORDER BY g.grp ,c.cls
;
什么样的SQL这是MS我?? – AlvinArulselvan
你已经试过了什么SQL? –
请让我知道投票前的原因请即时发布疑问 – user2568275