我有一个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列即使没有任何数据的任何想法?我不在乎他们是否为空,我只需要在主要患者查询中拥有这些占位符,并且不能帮助每个月返回的列数不同。
跟着你的逻辑与你需要的所有列的另一个表,35 POA,插入也需要是动态的,并且只插入你所做的关键点的列..类似于“insert into #othertable(”+ )从POAName select * from #othertable“ – mxix 2014-11-06 17:33:22
中选择”+ colsPOA +“您可以在表示层处理它吗? – Beth 2014-11-06 17:36:50
@Beth - 不,我将这些数据和患者数据放入另一个提供许多联合查询的临时表中。我想我可以在创建动态列的查询中对列名进行硬编码。 – JohnD 2014-11-06 17:45:04