TEMP表に挿入されたデータを参照する問合せがあります(その表には機密情報が含まれていません)。列1を同じに保つ必要がありますが、動的に2番目の列をPIVOTする必要があります。
私は必要な情報を得ることができますが、私はそれをより整理する必要があります。今、私はこれを取得するには、次の問合せを使用してい
trac_id CONTACT_DATE
040 2017-02-20 00:00:00.000
059 2017-03-08 00:00:00.000
001 2017-03-01 00:00:00.000
001 2017-03-08 00:00:00.000
001 2017-03-13 00:00:00.000
001 2017-03-16 00:00:00.000
001 2017-03-16 00:00:00.000
001 2017-03-17 00:00:00.000
001 2017-03-22 00:00:00.000
001 2017-03-23 00:00:00.000
001 2017-03-23 00:00:00.000
001 2017-03-24 00:00:00.000
001 2017-03-27 00:00:00.000
001 2017-03-27 00:00:00.000
001 2017-03-30 00:00:00.000
001 2017-03-31 00:00:00.000
068 2017-02-13 00:00:00.000
067 2017-01-24 00:00:00.000
060 2017-02-08 00:00:00.000
060 2017-03-07 00:00:00.000
011 2017-02-16 00:00:00.000
011 2017-03-01 00:00:00.000
011 2017-03-23 00:00:00.000
011 2017-03-30 00:00:00.000
005 2017-02-16 00:00:00.000
005 2017-03-18 00:00:00.000
005 2017-03-08 00:00:00.000
013 2017-03-08 00:00:00.000
013 2017-03-13 00:00:00.000
013 2017-03-16 00:00:00.000
013 2017-03-16 00:00:00.000
013 2017-03-17 00:00:00.000
013 2017-03-22 00:00:00.000
013 2017-03-23 00:00:00.000
013 2017-03-24 00:00:00.000
013 2017-03-27 00:00:00.000
013 2017-03-27 00:00:00.000
013 2017-03-30 00:00:00.000
013 2017-03-30 00:00:00.000
013 2017-03-31 00:00:00.000
043 2017-02-03 00:00:00.000
として
出力データが表示さ:私が取得する必要がどのような
SELECT
spl.trac_id
,pev.CONTACT_DATE
FROM
#SAMHSA_PAT_LIST spl
INNER JOIN dbo.IDENTITY_ID_VIEW iiv
ON iiv.IDENTITY_ID=spl.MRN
LEFT JOIN dbo.PAT_ENC_VIEW pev
ON pev.PAT_ID = iiv.PAT_ID
LEFT JOIN dbo.PAT_ENC_RSN_VISIT_VIEW rsn
ON rsn.PAT_ENC_CSN_ID=pev.PAT_ENC_CSN_ID
WHERE
pev.CONTACT_DATE >= @Start_Date
AND pev.CONTACT_DATE < @End_Date
AND pev.APPT_STATUS_C IN (2 , 6 , 8 , 9)
AND rsn.ENC_REASON_ID = 590;
は、2つの+ n列を持つことです。私は、正確に何回目かを見て、trac_id 001が14個のエントリで示されているかどうかは分かりません。もしそれが最大数なら、私はPIVOTにしたい列の数をハードコーディングすることなく、trac_id、mm_1、mm_2、mm_3、mm_4、...、mm_14の列を必要とします。私の問題は、PIVOTを使ってみたすべての投稿とドキュメントでは、データが事前にテーブルに挿入されていて、通常はテーブル全体がPIVOTされていることです。
2番目の列のみをPIVOTすることは可能ですか?そうであれば、どうすればよいですか?
私はいくつかの投稿とヘルプ@Jakub_Ojmucianskiに基づいて私の解決策の一部を理解することができました。私は何を作ってみたことは以下の通りですが、それは唯一中途半端そこだと私は間違い作ったと確信している:
DECLARE @SQL VARCHAR(MAX)='',@PVT_COL VARCHAR(MAX)='';
SELECT @PVT_COL [email protected]_COL + '[mm_'+CAST(ROW_NUMBER() OVER(ORDER BY (SELECT
1)) AS VARCHAR(4))+'],'
FROM #medmtemp
SELECT @PVT_COL = LEFT(@PVT_COL,LEN(@PVT_COL)-1)
SELECT @SQL =
'SELECT * FROM (
SELECT trac_id, Contact ,''mm_''+CAST(ROW_NUMBER() OVER(ORDER BY (SELECT 1))
AS VARCHAR(4)) AS COL_NME
FROM #medmtemp
)AS A
PIVOT
(
MAX(Contact) FOR COL_NME IN ('[email protected]_COL+')
)PVT'
EXEC (@SQL)
を私が(ただ、最初の3つの新しい行を含む)、次を参照してください。
trac_id mm_1 mm_2 mm_3 mm_4 mm_5 mm_6 mm_7 mm_8 mm_9 mm_10 mm_11 mm_12 mm_13 mm_14 mm_15 mm_16 mm_17 mm_18 mm_19 mm_20
1 3/1/2017 3/8/2017 3/13/2017 3/16/2017 3/16/2017 3/17/2017 3/22/2017 3/23/2017 3/23/2017 3/24/2017 3/27/2017 3/27/2017 3/30/2017 3/31/2017 NULL NULL NULL NULL NULL NULL
5 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2/16/2017 3/18/2017 3/8/2017 NULL NULL NULL
8 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 3/8/2017 3/23/2017 3/30/2017
さがすダイナミックPIVOT' – Squirrel