#sql #sql-server #tsql #pivot
Вопрос:
У меня есть
ab | компакт-диск |
---|---|
1 | a |
2 | b |
3 | b |
8 | c |
Я хочу
a | b | c |
---|---|---|
1 | 2 | 8 |
нулевой | 3 | нулевой |
Я пытался
select a, b, c
from aib
pivot
(
max(ab)
for cd in (a,b,c)
) k
но я не могу перечислить все значения, так как агрегатная функция является обязательной для сводной функции
Комментарии:
1. Как минимум, вам нужно описать, чего вы хотите, а не просто привести загадочный пример.
2. Как вы определяете имена столбцов? почему это не a,b или a,b,c,d?
3. Я отредактировал вопрос, пожалуйста, посмотрите еще раз
Ответ №1:
Вам нужно что-то, чтобы различать строки результатов, номер строки, кажется, делает свое дело.
declare @aib table (ab int, cd varchar(1));
insert into @aib (ab, cd)
values
(1,'a'),
(2,'b'),
(3,'b'),
(8,'c');
with cte as (
select *
, row_number() over (partition by cd order by ab) rn
from @aib
)
select a, b, c --, rn
from cte
pivot (
max(ab) for cd in (a,b,c)
) k;
Примечание: Если вы добавите DDL DML для ваших выборочных данных в будущие вопросы, это значительно облегчит оказание помощи.