объединить несколько строк в одну строку с повторяющимся набором столбцов - PullRequest
0 голосов
/ 01 мая 2019

У меня есть таблица с несколькими страховыми полисами на клиента.Одна политика на запись.Мне нужно представить все политики в одной строке для каждого клиента.

Я прочитал все подобные вопросы, и они могут быть близки, но я не могу перевести ответы в мою ситуацию.

Моя таблица выглядит следующим образом

enter code here  Client-ID     Ins-Company   Policy-Number   Start-Date
                 1             BCBS          BSBC1           2018-01-01
                 1             Aetna         Aetna1          2017-01-01
                 1             Self-Pay      N/A             2016-01-01
                 2             Self-Pay      N/A             2015-01-01
                 3             BCBS          BCBS3           2014-01-01
                 3             Self-Pay      N/A             2013-01-01

Ожидаемый результат:

enter code here Client-ID Ins-Co1  Policy1  Start1      Ins-Co2   Policy2 Start2     Ins-Co3  Policy3 Start3
                1         BCBS     BCBS1    2018-01-01  Aetna     Aetna1  2017-01-01 Self-Pay  N/A    2016-01-01
                2         Self-Pay N/A      2015-01-01
                3         BCBS     BCBS3    2014-01-01  Self-Pay   N/A    2013-01-01 

Необходимо создать еще одну таблицу с этими записями

1 Ответ

0 голосов
/ 04 мая 2019

Я создал нужный результат с помощью следующего кода.

Сначала я создал представление исходной таблицы, в которой был добавлен номер строки, используя следующую функцию:
ROW_NUMBER() OVER(PARTITION BY a.Client_ID ORDER BY a.Billing_Order ASC) AS Row_No

и построил следующий код

enter code hereDECLARE @sql varchar(max)
DECLARE @colList varchar(max)

--create dynamic list of columns
SELECT @colList = 
STUFF
(
  (
   SELECT + ',' + 
   quotename(colName + Row_No)
   FROM Credible_Client_Insurance_Raw_Data_Query
   CROSS APPLY
   (
     SELECT 1 As Ord, 'Payer_ID' ColName UNION ALL
     SELECT 2 As Ord, 'Billing_Order' UNION ALL
     SELECT 3 As Ord, 'Insurance_ID' UNION ALL
     SELECT 4 As Ord, 'Group_No' UNION ALL
     SELECT 5 As Ord, 'Copay_Fee' UNION ALL
     SELECT 6 As Ord, 'Start_Date' 
    ) v 
    GROUP BY colName, Ord, Row_No
    ORDER BY Row_No, Ord
   for xml path(''), type
   ).value('/','varchar(max)'),1,1,''
)

--unpivot columns into rows and then apply pivot
SET @sql
= '
SELECT Client_ID, ' + @colList + ' 
FROM
(
   SELECT Client_ID, ColVal,
   colName + Row_No ColName
   FROM Credible_Client_Insurance_Raw_Data_Query
   CROSS APPLY
   (
     SELECT Payer_ID As ColVal, ''Payer_ID'' ColName UNION ALL
     SELECT Billing_Order, ''Billing_Order'' UNION ALL
     SELECT Insurance_ID, ''Insurance_ID'' UNION ALL
     SELECT Group_No, ''Group_No'' UNION ALL
     SELECT CAST(Copay_Fee AS VARCHAR), ''Copay_Fee'' UNION ALL
     SELECT CAST(Start_Date AS VARCHAR), ''Start_Date'' 
   ) v 
) A
PIVOT
(
   MAX(ColVal) FOR ColName IN (' + @colList + ')
) P1 '


EXEC(@sql)

Код был скопирован из другого вопроса

Поворот нескольких столбцов на основе одного столбца


Теперь у меня есть подпискана вопрос:

Теперь, когда я создал запрос, который предоставляет нужный мне результат

Мне нужно поместить результат в таблицу.

Я не могу взять этот запрос и сделатьэто в VIEW, потому что он начинается с оператора Declare (незаконно для представлений)

Так как мне перенести эти данные запроса в таблицу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...