SQL Преобразование нескольких строк в несколько столбцов

avatar
Sluna
1 июля 2021 в 16:19
34
1
0

У меня есть таблица, которая выглядит так:

Sku_Code  Channel Rank Category    Website      Date
123        US     28    Toys     www.foo.com    2021-06-07 
123        US     13    Games    www.lolo.com   2021-06-07
328        CA     12    Toys     www.lo.com     2021-05-12
123        US     2     Games    www.foo.com    2021-06-05

Я хотел бы повернуть эту таблицу, чтобы вся информация об идентификаторах располагалась в одной строке... вот так:

Sku_Code  Channel   Category  Category_1    Website       Website_1       Date
     123  US        Toys      Games        www.foo.com   www.lolo.com   2021-06-07 
     328  CA        Toys                   www.lo.com                   2021-05-12
     123  US        Games                  www.foo.com                  2021-06-05

Это довольно большая таблица, поэтому интересно, как лучше/быстрее всего это сделать? Я знаю, что есть функция поворота, которую я мог бы использовать, но не знаю, как ее применить в этой ситуации.

Я новичок в SQL, поэтому буду признателен за любую помощь.

Источник
Gordon Linoff
1 июля 2021 в 16:21
0

Я не слежу за вопросом. Идентификатор 123 повторяется в результатах.

Joel Coehoorn
1 июля 2021 в 16:22
0

Если идентификатор может иметь произвольное количество категорий, это невозможно в SQL. Язык SQL предъявляет строгие требования к количеству и типам столбцов, которые должны быть известны во время компиляции запроса, перед просмотром каких-либо данных.

jarlh
1 июля 2021 в 19:17
0

Какие СУБД вы используете? У одних продуктов есть PIVOT, у других нет.

Ответы (1)

avatar
Joel Coehoorn
1 июля 2021 в 16:25
1

Неясно, может ли идентификатор иметь произвольное количество категорий. Если да, то это невозможно только в обычном SQL. Язык SQL предъявляет строгие требования к количеству и типам столбцов, которые должны быть известны во время компиляции запроса, перед просмотром каких-либо данных.

Это не означает, что то, что вы хотите сделать, вообще не может произойти... просто решение будет более сложным. Например, вам может понадобиться выполнить сводку в инструменте создания отчетов или клиентском коде. Другой альтернативой является динамический sql, состоящий из трех шагов: во-первых, запустите запрос, чтобы определить, сколько категорий вам понадобится. Во-вторых, используйте информацию, полученную на первом этапе, для создания новой инструкции SQL «на лету», возможно, с дополнительным соединением с той же таблицей для каждой категории, используя ключевое слово PIVOT или и то, и другое. Наконец, выполните инструкцию SQL, созданную на втором шаге.

.
Sluna
1 июля 2021 в 16:36
0

Благодарю за ваш ответ. Столбец ID — это идентификатор продукта, поэтому это может быть любой тип числа. Столбец идентификатора может иметь произвольное количество категорий, поэтому мне, скорее всего, придется использовать ваше более сложное решение. Спасибо за помощь.