SQL сервер - Как разбить один столбец на несколько столбцов? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть этот запрос:

select plantnaam, plantmaat, stapel, hoeveelheid
from kist
where rij = '11'
order by stapel ASC, datum DESC

This is what the query gives me..

Чего я хочу добиться, так это дать каждому числу столбца «Stapel» отдельный столбец, заполненный информация о колонках 'Plantnaam + Plantmaat + Hoeveelheid'. Например:

enter image description here

Возможно ли создать запрос, подобный этому? Любая помощь будет высоко ценится.

Ответы [ 3 ]

2 голосов
/ 04 мая 2020

Если бы я следовал за вами правильно, вы могли бы сделать это с помощью row_number() и условного агрегирования:

select
    max(case when stapel = 1 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col1,
    max(case when stapel = 2 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col2,
    max(case when stapel = 3 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col3,
    max(case when stapel = 4 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col4,
    max(case when stapel = 5 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col5
from (
    select 
        t.*, 
        row_number() over(partition by stapel order by plantnaam, plantmaat, hoeveelheid) rn
    from mytable t
) t
group by rn

Предложение order by row_number() определяет, в каком порядке отображаются строки в наборе результатов; Возможно, вы захотите адаптировать его к вашим точным требованиям.

1 голос
/ 04 мая 2020

Эту проблему можно решить с помощью PIVOT на SQL сервере.

Чтобы понять, что такое Pivot, используйте ссылку, на которую уже даны ответы ниже

Понимание функции PIVOT в T- SQL

0 голосов
/ 04 мая 2020

Вы можете использовать старый добрый стиль max / sum (случай, когда скрепка = 1, затем plantnaam + '' + plantmaat + '' + конец hoeveelheid) как 1 и сгруппировать по скрепке и использовать оператор repeat для печати грести несколько раз. Или, как предложено выше, вы можете использовать оператор PIVOT.

Предположим, что здесь столбец plantmaat имеет строковый тип, в противном случае вам придется использовать функцию преобразования для преобразования числа в строку.

...