使用case语句对项进行分组
本文关键字:case 语句 使用 | 更新日期: 2023-09-27 17:57:33
问题:如何使用case语句对表进行分组
例如,我有两张桌子。
第一个表
id名称
1 a
2 b
3 c
第二张表是
id状态
1红色
1红色
1蓝色
1红色
这是一个场景:
- 我在表1和表2上留下了联接id
-
如果它有相同的id,那么它将创建一个case语句。
- 如果表2上的所有状态都包含红色,则[条件]
- 如果状态包含红色和蓝色,则[条件]
- 如果不在案件中,则[条件]
我将如何创建这个?
对于大多数/所有DBMS的通用方法,可以使用以下方法:
SELECT t.ID,
t.Name,
CASE WHEN t.Red = t.Total THEN 'Only Red condition'
WHEN t.Red > 0 AND t.Blue > 0 THEN 'Red and blue condition'
ELSE 'Other condition'
END AS CaseCondition
FROM ( SELECT Table1.ID,
Table1.Name,
COUNT(CASE WHEN Table2.Status = 'Red' THEN 1 END) AS Red,
COUNT(CASE WHEN Table2.Status = 'Blue' THEN 1 END) AS Blue,
COUNT(Table2.Status) AS Total
FROM Table1
LEFT JOIN Table2
ON Table1.ID = Table2.ID
GROUP BY Table1.ID, Table1.Name
) t
如果您的DBMS支持PIVOT(并且唯一可能的值是红色和蓝色),那么您可以使用以下内容:
SELECT ID,
Name
CASE WHEN pvt.Red > 0 AND pvt.Blue = 0 THEN 'Only Red condition'
WHEN t.Red > 0 AND t.Blue > 0 THEN 'Red and blue condition'
ELSE 'Other condition'
END AS CaseCondition
FROM Table1
LEFT JOIN Table2
ON Table1.ID = Table2.ID
PIVOT
( COUNT(Table2.ID)
FOR Table2.Status IN ([Red], [Blue])
) pvt