在没有数据字段的计数中加零

时间:2013-07-17 09:08:49

标签: sql

我有两张桌子TAB1和TAB2

TAB1:

ID  NAME
1   Supreeth
2   Aishu
3   Arvi
4   Gani

TAB2:

ID  DESIGN
1   A
1   B
4   B
4   C
2   A
3   B
3   B

我试图获得设计的数量,我得到以下输出

NAME        DESIGN  Count(DESIGN)
Supreeth        A        1
Supreeth        B        1
Aishu           A        1
Arvi            B        2
Gani            B        1
Gani            C        1

我正在尝试的查询是

SELECT TAB1.NAME,TAB2.DESIGN, COUNT(DESIGN) 
FROM TAB1 , TAB2
WHERE TAB1.ID=TAB2.ID
GROUP BY TAB1.NAME,TAB2.DESIGN,TAB1.ID
ORDER BY TAB1.ID

但我正在寻找输出


NAME        DESIGN  Count(DESIGN)
Supreeth        A        1
Supreeth        B        1
Supreeth        C        0
Aishu           A        1
Aishu           B        0
Aishu           C        0
Arvi            A        0
Arvi            B        2
Arvi            C        0
Gani            A        0
Gani            B        1
Gani            C        1



请告诉我如何使用SQL查询实现此目的。提前致谢

2 个答案:

答案 0 :(得分:3)

试试这个:

SELECT 
   TAB1.ID,
   TAB1.NAME,TAB2.DESIGN,
   SUM(CASE WHEN TAB1.ID=TAB2.ID THEN 1 ELSE 0 END) as count
FROM 
   TAB1 CROSS JOIN TAB2
GROUP BY 
   TAB1.ID,TAB1.NAME,TAB2.DESIGN
ORDER BY 
   TAB1.ID

<强> SQLFiddle

答案 1 :(得分:0)

试试这个

SELECT T1.[ID], T1.[NAME],T2.[DESIGN],
(
  SELECT COUNT([DESIGN]) FROM TAB2 TT2 WHERE TT2.ID=T1.ID AND TT2.[DESIGN] = T2.[DESIGN]
) AS CNT
FROM TAB1 T1
CROSS JOIN 
(
  SELECT [DESIGN] FROM TAB2 GROUP BY [DESIGN]
) T2
ORDER BY T1.[NAME],T2.[DESIGN]

SQL FIDDLE DEMO