如何从Category_Two取唯一值并标记对应Category_One的组成情况
问题:如何按要求查询数据表结果
原始数据表定义及数据插入
CREATE TABLE #Temp1 ( Category_One varchar(10), Category_Two varchar(10) ) INSERT INTO #Temp1 (Category_One, Category_Two) VALUES ('a', 'c'), ('b', 'c'), ('a', 'd'), ('b', 'd'), ('a', 'e'), ('a', 'f'), ('b', 'g')
原始数据内容
| Category_One | Category_Two |
|---|---|
| a | c |
| b | c |
| a | d |
| b | d |
| a | e |
| a | f |
| b | g |
查询需求
获取Category_Two的唯一值列表,同时新增一列说明该值对应的Category_One是否包含两个不同的类别,目标结果如下:
| Category_Final | Description |
|---|---|
| c | Category a and b |
| d | Category a and b |
| e | Category a |
| f | Category a |
| g | Category b |
解决方案
可以通过分组统计+条件判断实现,以下是SQL查询语句:
SELECT Category_Two AS Category_Final, CASE WHEN COUNT(DISTINCT Category_One) = 2 THEN 'Category a and b' WHEN MAX(Category_One) = 'a' THEN 'Category a' ELSE 'Category b' END AS Description FROM #Temp1 GROUP BY Category_Two ORDER BY Category_Final
逻辑说明
- 按
Category_Two分组,确保每个Category_Two仅出现一次; - 用
COUNT(DISTINCT Category_One)统计分组内不同Category_One的数量; - 通过
CASE语句生成对应描述:- 数量为2时,说明同时包含a和b,返回
Category a and b; - 否则判断分组内的
Category_One类型,返回对应描述;
- 数量为2时,说明同时包含a和b,返回
- 按
Category_Final排序,与目标结果顺序一致。
内容的提问来源于stack exchange,提问作者EthanT
相关产品推荐
相关产品推荐

