我有一個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