SQL: Расширить 1 столбец до 3 в таблице суммирования - PullRequest
2 голосов
/ 12 октября 2010

Я пишу программу, которая отображает товары и магазины, в которых они могут быть расположены.

До сих пор я был в состоянии написать запрос SQL, который отображает данные следующим образом:

Product    Availability
Milk       Store1
Candy      Store1
Eggs       Store1
Milk       Store2
Eggs       Store2
Candy      Store3
Eggs       Store3

Можно ли использовать какой-либо SQL-запрос, чтобы продукты были сгруппированы в столбце «Продукт», а магазины, в которых они могут быть расположены, были расширены на 3 столбца, как показано ниже?

Product  Store1  Store2  Store3
Milk     Yes     Yes     No
Candy    Yes     No      Yes
Eggs     Yes     Yes     Yes

Ответы [ 4 ]

4 голосов
/ 12 октября 2010
SELECT 
    Product,
    MAX(CASE WHEN Availability='Store1' THEN 'Yes' ELSE 'No' END) AS Store1,
    MAX(CASE WHEN Availability='Store2' THEN 'Yes' ELSE 'No' END) AS Store2,
    MAX(CASE WHEN Availability='Store3' THEN 'Yes' ELSE 'No' END) AS Store3
FROM YourTable
GROUP BY Product
3 голосов
/ 12 октября 2010

Большинство RDBM в настоящее время поддерживают пивот. Было бы очень полезно, если бы вы указали, какую базу данных вы используете. Некоторые примеры: MSSQL , postgres (функция кросс-таблицы) и т. Д.

3 голосов
/ 12 октября 2010

Очень распространенный вопрос. Слово, которое вам нужно знать, это pivot . Ищите в StackOverflow «сводку» или, возможно, «кросс-таблицу», чтобы найти множество обсуждений и примеров.

1 голос
/ 12 октября 2010

Предполагая, что вы не знаете имен столбцов до выполнения запроса, этот блог дает хорошее решение (но остерегайтесь инъекционных атак).

...