1

我有一个表,它根据两个标识值(产品代码和一个详细代码)存储值,使每一行都是唯一的,第三个值存储基于详细代码的值类型。我想做的是在新列中显示任何一个产品代码的所有第三个值。详细代码将充当列标题。

到目前为止我已经尝试过:

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' 的情况下正常工作。

我假设还有一种更好的方法来解决这个问题,但是在任何地方都很难找到这种确切的情况。我绝对可以使用没有多列的数据,但希望不要/学到一些东西

4

1 回答 1

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;
于 2013-09-19T01:54:01.123 回答