MySQL:使用GROUP BY基于行级项创建含Manufacture列的视图VIEW_A
实现MySQL视图VIEW_A的方案
核心思路
先将manf列的空值统一视为'A',再按order_no分组,根据组内manf的取值组合匹配规则返回对应结果:
- 组内仅含'A'(含原空值)→ 返回'A'
- 组内仅含'B' → 返回'B'
- 组内同时存在'A'和'B' → 返回'Mixed'
具体SQL语句
CREATE VIEW VIEW_A AS SELECT order_no, CASE -- 组内全为B的情况 WHEN COUNT(DISTINCT COALESCE(manf, 'A')) = 1 AND MAX(COALESCE(manf, 'A')) = 'B' THEN 'B' -- 组内同时存在A和B的情况 WHEN COUNT(DISTINCT COALESCE(manf, 'A')) > 1 THEN 'Mixed' -- 剩余情况:组内仅含A(含原空值) ELSE 'A' END AS Manufacture FROM your_table_name -- 替换为实际的表名 GROUP BY order_no;
逻辑说明
COALESCE(manf, 'A'):将manf的空值转换为'A',符合规则中空值等价于'A'的要求COUNT(DISTINCT ...):统计分组后去重的manf取值数量,判断是否存在多类型MAX(COALESCE(manf, 'A')):当去重后仅有一种取值时,确认是'B'还是'A'
内容的提问来源于stack exchange,提问作者Sharma Ji
相关产品推荐
相关产品推荐

