-4

表 ABCD

   Group1 类
      C1 A
      C2 A
      C3乙
      C4 C
      C1 A

在这里我有桌子,我试图得到以下结果

OUTPUT : (在这种格式中需要使用表 ABCD

Group1 类计数
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 中的查询来实现这一点。提前谢谢你,我对oracle的查询很陌生,所以请帮助我查询。

4

4 回答 4

0

这适用于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]

更新的演示

于 2013-07-10T12:16:36.960 回答
0

不确定我是否正确理解了你的问题,但我认为你想要这样的东西:

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

于 2013-07-10T12:53:59.053 回答
0

您可以使用以下查询来获取结果。这将创建一个列表 eachgroup1和 each 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 Fiddle

于 2013-07-10T12:54:00.420 回答
0
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
        ;
于 2013-07-10T13:12:55.553 回答