IDの数が1つのテーブルがあります。 SourceIDごとに1〜4の固有IDを持つことができます。以下に示すように、1から4までのすべてのユニークIDをカウントするためのCTEを作成しました。1フィールドの数に基づいて4つのフィールドを更新する方法
はCNTに基づいて、およびsourceid_revisedプラスasofdateに参加し、私はあなたが下の画像の中に見えるように、IDを持つ別のテーブルを更新します。
擬似コードは次のようになります:私は、SQL Server 2008の
アップデートを使用しています
UPDATE RAW_DATA
SET
RAW_DATA.ID1 = case when Count_Of_IDs.cnt=1 then FIRST(PID) end,
RAW_DATA.ID2 = case when Count_Of_IDs.cnt=2 then SECOND(PID) end,
RAW_DATA.ID3 = case when Count_Of_IDs.cnt=3 then THIRD(PID) end,
RAW_DATA.ID4 = case when Count_Of_IDs.cnt=4 then Forth(PID) end
FROM RAW_DATA INNER JOIN
Count_Of_IDs ON RAW_DATA.SourceID_Revised = Count_Of_IDs.Sourceid_Revised AND
RAW_DATA.AsofDate = Count_Of_IDs.asofdate
!
コメントをするのではなく、オリジナルの投稿を編集するのが最も簡単だと思います。この部分はうまくいくようです。
select *, count(PID) over (partition by SourceID_Revised) RN
FROM [dbo].[RAW_DATA]
ので、RNは、正常に動作するようです。4.より大きくなることはありませんが、私は働いて、それの残りの部分を取得することはできません。私は、DENSE_RANKバージョンをテストしています、と私は、この行のエラーを取得しておいてください。
cte2 as (
エラー= Incorrect syntax near 'cte2'
動作するはずそれはほとんどこのように思える...
Select SourceID_Revised, ID, ID1, ID2, ID3, ID4, RN
Set ID1 = max(case when RN = 1 then ID end),
Set ID2 = max(case when RN = 2 then ID end),
Set ID3 = max(case when RN = 3 then ID end),
Set ID4 = max(case when RN = 4 then ID end)
FROM
(
select SourceID_Revised, ID, ID1, ID2, ID3, ID4, count(ID) over (partition by SourceID_Revised) RN
FROM [dbo].[RAW_DATA]
) AS Summary
を。 ..もちろん、それはしません。
IDをピボットしたいと思っているようです... – scsimon
これはおそらくピボットの一種です。私はカウントをしているテーブルに内部結合をする必要があると思うが、ピボットはそのステップを排除することができるかもしれない。私は確信していません... – ryguy72
ロングフォーマットは、ワイドフォーマットよりも効率、スケーラビリティ、および保守性が優れているため、このようなテーブルデザインは推奨されません。 – Parfait