我有一个 POA 代码动态数据透视表,它从 DX 临时表中提取数据并将数据插入到临时 POA 表中。
我遇到的问题是最多可以返回 35 个不同的列。根据月份,可能有 15 列 ( POA1...POA15
),也可能有全部 35 列 ( POA1...POA35
)。我在另一个病人表上加入了这个动态数据透视表。我的问题是,即使临时 POA 表中不存在某些列,我也需要显示所有 35 列。
--Pivot DX POA Codes
DECLARE @POANAME VARCHAR(40)
SELECT @POAName = '##tmpPOA'
DECLARE @colsPOA NVARCHAR(2000)
SELECT @colsPOA = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + 'POA' + CAST(Dx.RowNum AS NVARCHAR)
FROM #tmpDX DX
ORDER BY '],[' + 'POA' + CAST(Dx.RowNum AS NVARCHAR)
FOR XML PATH ('')
),1,2,'') + ']'
DECLARE @queryPOA NVARCHAR(4000)
SET @queryPOA = 'N
SELECT
EncObjID,
'+
@colsPOA
+' INTO ' + POAName + '
FROM
(SELECT
Dx.EncObjID
,''POA'' + Dx.RowNum AS RowNum
,Dx.POAMne
FROM #tmpDx Dx
) p
PIVOT
(
MIN([POAMne])
FOR RowNum IN
( ' + @colsPOA + ' )
) AS pvt'
EXECUTE(@queryPOA)
我在患者查询中收到无效的列名,因为某些列不存在于##tmpPOA
. 我考虑过创建一个名为#tmpDxPOA
并执行插入 ( Insert Into #tmpDxPOA select * from ##tmpPOA
) 的临时表,但这不起作用(我收到一个列名或提供的值的数量不匹配错误)。
即使没有任何数据,关于如何创建所有 35 列的任何想法?我不在乎它们是否为空,我只需要在主要患者查询中包含这些占位符,并且返回的列数每个月都不同,这无济于事。