Я пытаюсь PIVOT некоторые данные в таблице, но я не могу этого сделать, потому что я не нахожу способ сделать это, используя столбцы varchar. У меня есть эта таблица:Pivot Column of varchar
declare @table table(name VARCHAR(50) not null, occupation VARCHAR(MAX))
insert into @table values ('A','Doctor')
insert into @table values ('B','Doctor')
insert into @table values ('A','Professor')
insert into @table values ('A','Singer')
insert into @table values ('A','Actor')
SELECT
CASE WHEN occupation = 'Doctor' THEN NAME END AS Doctor,
CASE WHEN occupation = 'Professor' THEN NAME END AS Professor,
CASE WHEN occupation = 'Singer' THEN NAME END AS Singer,
CASE WHEN occupation = 'Actor' THEN NAME END AS Actor
FROM @table
Выход:
Doctor Professor Singer Actor
A NULL NULL NULL
B NULL NULL NULL
NULL A NULL NULL
NULL NULL A NULL
NULL NULL NULL A
И Pivot я получаю этот выход:
select * from
(
select name, occupation from @table) src
pivot (
min(name)
for occupation in ([Doctor],[Professor],[Singer],[Actor])) as pvt
Doctor Professor Singer Actor
A A A A
И мин/макс/функция Функция поворота дает мне возможность лишь частичного вывод, для функции count я получаю количество записей для врача, певца и т. д. Но мне нужны реальные строки, а не количество строк.
Что мне нужно это:
Doctor Professor Singer Actor
A A A A
B NULL NULL NULL
т.е. предположит, если мы имеем 5 имя для врачей, мы должны показать 5 записей для врача колонка.
Спасибо! :). Но заказ не заказывается в порядке возрастания для других записей, на самом деле мне нужно заказать все столбцы по возрастанию, поэтому я отдал приказ 1,2,3,4 – MAX
@max. , , Если вы хотите, чтобы имена были в порядке возрастания, используйте 'order by name' в разделе' order by' для 'row_number()'. –
Я чувствовал, что мы можем сделать это с помощью row_number(), и на самом деле я также написал дополнительный запрос. Но я не знал, чтобы объединить и оператор case внешнего и фактического столбца с rowid внутреннего запроса. – MAX