я следующее:SQL Преобразование нескольких строк в нескольких столбцах
DECLARE @tmp TABLE (cid int, pid int, name varchar(10))
Insert Into @tmp (cid, pid, name)
Select 31, 18, 'Pot_One' UNION ALL
Select 32, 18, 'Pot_One' UNION ALL
Select 31, 19, 'Pot_Two' UNION ALL
Select 32, 19, 'Pot_Two' UNION ALL
Select 33, 19, 'Pot_Two' UNION ALL
Select 40, 20, 'Pot_Three'
Это описывает несколько Сида становятся вместе, чтобы создать банк, например, 31 и 32 находятся в банке один и горшок ID для него 18, мы можем получить любое количество cid в банке (минимум 1 и не больше)
То, что я пытаюсь достичь, - это получить горшки и соответствующие циклы в ряд, поэтому я подумал об использовании поворота и попробовал это:
SELECT * from
(
select cid, pid, name
from @tmp
) x
pivot
(
min(cid)
for pid in ([18],[19],[20])
) p
Но это возвращает:
name 18 19 20
Pot_One 31 NULL NULL
Pot_Three NULL NULL 40
Pot_Two NULL 31 NULL
То не так, потому что банк один имеет 31 и 32 в нем, и это представляет только 31, что мне нужно, это потенциально:
name 18 18 19 19 19 20
Pot_One 31 32 NULL NULL NULL NULL
Pot_Three NULL NULL NULL NULL NULL 40
Pot_Two NULL NULL 31 32 33 NULL
Я изменил стержень чтобы получить Сиду как заголовки столбцов и получил это, более ближе к тому, что я пытаюсь достичь:
SELECT * from
(
select cid, pid, name
from @tmp
) x
pivot
(
min(pid)
for cid in ([31],[32],[33],[40])
) p
name 31 32 33 40
Pot_One 18 18 NULL NULL
Pot_Three NULL NULL NULL 20
Pot_Two 19 19 19 NULL
Я попробовал несколько различных способов без успеха, есть ли другие способ достижения этого?
Благодаря
Что вы хотите, чтобы вывод выглядеть? –
Это выглядит немного сложнее, но также очень интересно. Можете ли вы предоставить желаемый результат? –
Спасибо, что посмотрели. Мне нужно, чтобы иметь возможность отображать как-то cid 31 и 32 в горшке 18, а cid 31,32 и 33 находится в горшке 19, а cid 40 находится в капоте 20. – 03Usr