我有一张桌子,每个客户有多个保险单。每条记录一项政策。 我需要在每个客户的一行中代表所有策略。
我已经阅读了所有类似的问题,它们可能很接近,但是我似乎无法将答案转化为我的情况。
我的桌子看起来像这样
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
需要使用这些记录创建另一个表
答案 0 :(得分:0)
我使用以下代码创建了所需的结果。
首先,我使用以下函数创建了添加了行号的源表的视图:
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语句(对于Views是非法的)开头
那么如何将查询数据传输到表中?