Динамически преобразуя несколько строк в одну строку с несколькими столбцами, pivot не работает - PullRequest
0 голосов
/ 21 февраля 2020

Я вижу много сообщений об этом, но не могу найти правильный ответ.

Вот данные:

image

Первые 2 строки являются частью одного набора. Я хочу преобразовать первые две строки в 1 строку и иметь последний столбец («Информация»), превратить в 2 столбца (потому что есть 2 строки) и потому, что они разные.

То же самое с идентификаторами: 14, 24 и т. Д. c.

Вот что я попробовал:

 SELECT 
  BankId,
  BankDate,
  TypeCode,
  Amount,
  FundsType,
  BankRef,
  CustRef,
  Text,
  ptable.Comment1,
  ptable.Comment2,
  ptable.Comment3,
  ptable.Comment4,
  ptable.Comment5,
  ptable.Comment6,
  ptable.Comment7,
  ptable.Comment8,
  ptable.Comment9,
  ptable.Comment10,
  ptable.Comment11,
  ptable.Comment12,
  ptable.Comment13,
  ptable.Comment14,
  ptable.Comment15
FROM (
  SELECT BankId, BankDate, TypeCode, Amount, FundsType, BankRef, CustRef, Text, Info, [16TId], [88TId]
  FROM #test --ORDER BY [16TId], [88TId]
) AS SourceTable
PIVOT (
  MIN([88TId])
  FOR [Info] IN ([Comment1], [Comment2], [Comment3], [Comment4], [Comment5], [Comment6], [Comment7], [Comment8], [Comment9], [Comment10], [Comment11],
                 [Comment12], [Comment13], [Comment14], [Comment15]
  )
) AS ptable;

И вот как выглядят данные:

image

Данные из столбца «INFO» не попадают в столбцы «Comment1, Comment2 и т. Д. 1024 *».

Я пытался сделать PIVOT, но он не работает. Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 21 февраля 2020

Вы хотите показать Info, чем следует использовать MAX(Info). cn - генерировать последовательный номер для каждого комментария / информации

Изменить на

FROM 
(
     SELECT BankId, BankDate, TypeCode, Amount, FundsType, BankRef, CustRef, Text,
            Info, [16TId], 
            cn = ROW_NUMBER() OVER (PARTITION BY BankId, [16TId]
                                        ORDER BY [88TId])
     FROM   #test --ORDER BY [16TId], [88TId]
) AS SourceTable
PIVOT
(
    MAX (Info)
    FOR [cn] IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], 
                 [11], [12], [13], [14], [15])
) AS ptable;
...