早上好,
我有 2 个视图: ICCUDays,每个账户包含一条记录,字段 ACCOUNT 和 ICCUDays,ICCUEnctrSelectedRevCatsDirCost,每个账户包含多个记录,字段 ACCOUNT、UBCATEGORY 和 DirectCost。
我的目标:创建一个存储过程,通过 UBCATEGORY 使用 ICCUDays 和 DirectCost 为每个 ACCOUNT 输出一条记录。这将是一个交叉表或数据透视表,并且必须允许在一个或多个直接成本子类别桶中出现空值的可能性。最后,需要将此交叉表或数据透视表发送到新表 EnctrUBCatPivot。
问题:上述场景的正确 PIVOT 语法是什么?鉴于我想为许多 UBCATEGORY 条目输出直接成本,我如何编写 TSQL 来迭代这些并按帐户和 UBCATEGORY 进行透视?这一切是在一个存储过程中完成的,还是必须分成多个存储过程才能将结果写入表中?
这是我到目前为止编写的代码:
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。
我对合并语法不是很熟悉,因此无法辨别如何修改它以添加更多列,我也不确定如何/在何处添加内部连接语法以添加 ICCUDays。
有人可以指出我正确的方向吗?谢谢, 席德