2017-02-18 172 views
0

这可能是非常简单的解决方案,但我挣扎了几个小时而没有任何结果。让我用例子来展示我的问题。我有一个表:如何自定义SQL查询结果(select in select)

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 

回答

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; 
0

使用数据透视表的概念属性Id

0

试试这个: -

SELECT u.productID, 
    u.attributeValue, 
    NEW_attributeValue = (SELECT attributeValue FROM table1 WHERE productID = u.productID and attributeID = 'a02') 

    FROM table1 AS u 
    WHERE attributeID = 'a01' 

但是最好使用条件汇总

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