如何自定义SQL查询结果(在select中选择)

时间:2017-02-18 13:41:46

标签: sql select subquery

这可能是一个非常简单的解决方案,但我正在努力工作几个小时而没有任何结果。让我用例子说明我的问题。我有一张桌子:

productID|attributeID|attributeValue
001      | a01       | value1
001      | a02       | value2
002      | a01       | value2_1
002      | a02       | value2_2

我尝试过使用此查询代码:

SELECT 
    productID, 
    attributeValue,
    NEW_attributeValue = (SELECT attributeValue 
                          FROM table1 
                          WHERE attributeID = 'a02')
FROM 
    table1
WHERE 
    attributeID = 'a01'

以上查询代码只是我的概念。代码失败,因为第二个子查询有多个结果。你知道如何收到这个结果:

001 | value1   | value2
002 | value2_1 | value2_2

4 个答案:

答案 0 :(得分:0)

一种简单的方法是条件聚合

select productId,
       max(case when attributeID = 'a01' then attributeValue end) as a01,
       max(case when attributeID = 'a02' then attributeValue end) as a02
from t
group by productId;

答案 1 :(得分:0)

对列属性ID使用数据透视表概念

答案 2 :(得分:0)

试试这个: -

(1, 0)

但最好使用条件聚合

答案 3 :(得分:0)

使用PIVOT看起来像这样:

SELECT *
    FROM (
        SELECT productID, attributeID, attributeValue
            FROM table1
    ) AS SourceTable
    PIVOT (
        MAX([attributeValue]) 
        FOR [attributeID] IN ([a01], [a02])
    ) AS PivotTable;

SQL Fiddle Example Here