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

Использования Сводной таблицы концепции для столбца attributeID

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

 Смежные вопросы

  • Нет связанных вопросов^_^