2017-02-18 85 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