Sql “分类”;分组方式;按内容分组

Sql “分类”;分组方式;按内容分组,sql,join,grouping,Sql,Join,Grouping,我有一个视图,它是两个联接表的产物: ID Type 1 A 2 A 2 B 3 B 类型列中只能有两个值:A或B 我想将ID聚合为三类:Category_A、Category_B和Category_AB。如果ID仅与类型A关联,则将其分配为Category_A,如果ID与类型A和B关联,则将其与Categry_AB关联。根据这些规则,上述视图应分类如下: ID Category 1 Category_A 2 Category_AB 3 Category_C 是否可以

我有一个视图,它是两个联接表的产物:

ID Type
1   A
2   A
2   B
3   B
类型列中只能有两个值:A或B

我想将ID聚合为三类:Category_A、Category_B和Category_AB。如果ID仅与类型A关联,则将其分配为Category_A,如果ID与类型A和B关联,则将其与Categry_AB关联。根据这些规则,上述视图应分类如下:

ID  Category
1  Category_A
2  Category_AB
3  Category_C

是否可以编写一个SQL查询来实现这一点?

我会对它们进行不同的命名,但逻辑是:

select id,
       (case when min(category) = max(category)
             then 'Category_' || min(category)
             else 'Category_AB'
        end)
from t
group by id;

独立于戈登的回答,我得出了以下结论

SELECT ID,
       CASE
           WHEN COUNT(*) > 1 THEN 'AB'
           ELSE MAX(Type)
       END AS Category
FROM Products
GROUP BY ID

请参见运行:)

(1)用您正在使用的数据库标记您的问题。(2) 名字不是更自然的是
A
AB
B
?什么是
“类别”| | min(类别)
?它在SQL Server中不起作用。请使用
concat('Category',min(Category))
代替
'Category|min(Category)
@JohnyL
| |
是字符串连接的标准SQL运算符。SQL Server使用非标准的
+
运算符。