おはよう、
2つのビューがあります。ACCOUNTフィールドとICCUDaysフィールドを持つアカウントごとに1つのレコードを含むICCUDays、ACCOUNT、UBCATEGORY、およびDirectCostフィールドを持つアカウントごとに複数のレコードを含むICCUEnctrSelectedRevCatsDirCostです。
私の目標:IBCATEGORYによるICCUDaysとDirectCostを使用して、ACCOUNTごとに1つのレコードを出力するストアドプロシージャを作成すること。これはクロス集計またはピボットになり、1つ以上の直接コストのubcategoryバケットでnullが発生する可能性を考慮に入れる必要があります。最後に、このクロス集計またはピボットを新しいテーブルEnctrUBCatPivotに送信する必要があります。
質問:上記のシナリオの正しいPIVOT構文は何ですか?UBCATEGORYエントリの数に応じて直接コストを削減したい場合、これらを反復処理してアカウントとUBCATEGORYでピボットするTSQLを作成するにはどうすればよいですか?これはすべて1つのsprocで実行されますか、それとも結果をテーブルに書き出すために複数のsprocに分割する必要がありますか?
これまでに書いたコードは次のとおりです。
ALTER PROCEDURE [dbo].[spICCUMain]
-- Add the parameters for the stored procedure here
AS
declare @columns varchar(8000)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @columns = COALESCE(@columns + ',[' + cast(UBCATEGORYmid as varchar) + ']','[' + cast(UBCATEGORYmid as varchar)+ ']')
FROM vwICCUEnctrSelectedRevCatsDirCost
GROUP BY UBCATEGORYmid
DECLARE @query VARCHAR(8000)
SET @query = '
SELECT *
FROM vwICCUEnctrSelectedRevCatsDirCost
PIVOT
(
MAX(DirectCost)
FOR [UBCATEGORYmid]
IN (' + @columns + ')
)
AS p'
EXECUTE(@query)
END
これは、各UBCATEGORYのアカウントとすべての直接コストを出力するという点で正常に機能します。ただし、ICCUDaysのピボットに列を追加するには、ACCOUNTのvwICCUDAYSに内部結合する必要があります。最終的なピボット列は、各UBCATEGORYmidのアカウント、ICCUDays、直接コストである必要があります。
私は合体構文にあまり精通していないため、列を追加するためにそれを変更する方法を識別できません。また、ICCUDaysを追加するために内部結合構文を追加する方法/場所もわかりません。
誰かが私を正しい方向に向けることができますか?ありがとう、シド