早安,如何使用PIVOT在存儲過程SQL Server 2005中加入兩種觀點
我有兩個觀點:它包含一個帳戶只能記錄與領域ACCOUNT ICCUDays和ICCUDays,ICCUEnctrSelectedRevCatsDirCost其中包含每個賬戶的多條記錄與領域ACCOUNT,UBCATEGORY和DirectCost。
我的目標:創建一個存儲過程,通過UBCATEGORY爲ICCUDays和DirectCost每個帳戶輸出一個記錄。這將是一個交叉表或關鍵點,並且必須考慮到在一個或多個直接成本類別存儲桶中可能存在空值。最後,需要將此交叉表或數據透視表發送到新表EnctrUBCatPivot。
問題:上述場景的正確PIVOT語法是什麼?鑑於我想爲無論多少UBCATEGORY條目輸入直接成本,我該如何編寫TSQL來遍歷這些條目並按帳戶和UBCATEGORY進行調整?所有這些都是在一個sproc中完成的,還是必須將它分離爲多個sprocs才能將結果寫入表中?
這裏是我到目前爲止已經編寫的代碼:
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的直接成本。但是,我需要將內部連接加入到ACCOUNT上的vwICCUDAYS,以便將列添加到ICCUDays的數據透視表中。對於每個UBCATEGORYmid,最終的透視列應該是Account,ICCUDays,Direct Cost。
我不是很熟悉coalesce語法,因此無法辨別如何修改它以添加更多列,我也不確定如何/在哪裏添加內部連接語法來添加ICCUDays。
有人能指出我正確的方向嗎? 謝謝, Sid
是否有任何特別的理由使用視圖作爲查詢的基礎? – 2010-02-05 19:20:23