DX一時テーブルからデータを取得し、そのデータを一時POAテーブルに挿入する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 列すべてを作成する方法について何か考えはありますか? それらがnullかどうかは気にしません。メインの患者クエリにこれらのプレースホルダーが必要なだけで、返される列の数が毎月異なることは役に立ちません。