0

我有两张表 TAB1 和 TAB2

选项卡1:

身份证名称
1 苏普雷斯
2 爱书
3 阿尔维
4 加尼

选项卡2:

身份设计
1个
1乙
4乙
4℃
2个
3乙
3乙

我正在尝试获取 DESIGN 的数量,我得到以下输出

名称设计数(设计)
苏普雷斯 A 1
苏普雷斯 B 1
爱舒A 1
阿尔维 B 2
加尼 B 1
加尼 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

但我正在寻找像这样的输出

名称设计数(设计)
苏普雷斯 A 1
苏普雷斯 B 1
苏普雷斯 C 0
爱舒A 1
爱舒B 0
爱舒C 0
阿维A 0
阿尔维 B 2
阿尔维 C 0
加尼 A 0
加尼 B 1
加尼 C 1



请告诉我如何使用 SQL 查询来实现这一点。提前致谢

4

2 回答 2

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

于 2013-07-17T09:24:29.150 回答
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 小提琴演示

于 2013-07-17T09:32:02.597 回答