我有一个表,它根据两个识别值(产品代码和详细代码)存储值,这两个识别值使每一行都是唯一的,第三个值根据详细代码存储一种值。我想要做的是在新列中显示任何一个产品代码的所有第三个值。详细信息代码将作为列标题。
到目前为止我尝试过:
SELECT id1,
CASE WHEN id2 ='A'
THEN value
ELSE 0
END A,
CASE WHEN id2 ='B'
THEN value
ELSE 0
END B
FROM table1
WHERE id2 = 'A' OR id2 = 'B'
GROUP BY id1
除了当表中存在id2 ='A'的值时,id2 ='B'的CASE WHEN默认为0而不是正确的值(如果有的话)。如果没有id2 ='A'的记录,那么CASE WHEN将对id2 ='B'正常工作。
我认为还有更好的方法可以解决这个问题,但无法在任何地方找到这种确切的情况。我绝对可以使用没有多列的数据,但希望不要/学习一些东西
答案 0 :(得分:1)
这是您的查询格式,以便我可以阅读:
SELECT id1,
(CASE WHEN id2 = 'A' THEN value
ELSE 0
END) as A,
(CASE WHEN id2 = 'B' THEN value
ELSE 0
END) as B
FROM table1
WHERE id2 in ('A', 'B')
GROUP BY id1;
我注意到id2
中的select
字段没有聚合功能。当一个或另一个发生时,您似乎想要该值。试试这个:
SELECT id1,
max(CASE WHEN id2 = 'A' THEN value
ELSE 0
END) as A,
max(CASE WHEN id2 = 'B' THEN value
ELSE 0
END) as B
FROM table1
WHERE id2 in ('A', 'B')
GROUP BY id1;