Сводная таблица без агрегирования для перечисления всего содержимого, не являющегося символом

#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 для ваших выборочных данных в будущие вопросы, это значительно облегчит оказание помощи.