Sql-Server

來自樞軸的兩列的總和

  • December 29, 2014

我有以下查詢:

DECLARE @columns NVARCHAR(MAX),@columns1 NVARCHAR(MAX), @sql NVARCHAR(MAX),@columns2 NVARCHAR(MAX),@columns3 NVARCHAR(MAX);
SET @columns = '1,2,3,4';

SELECT @columns1 =
STUFF(( 
SELECT  ',' + QUOTENAME(Value)
FROM dbo.SplitString(@columns,',')

FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)') 
                       , 1, 1, '');

select @columns2 = STUFF(( 
SELECT  ',p.' + QUOTENAME(Value)
FROM dbo.SplitString(@columns,',')

FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)') 
                       , 1, 1, '');
                       select @columns3 = STUFF(( 
SELECT  ',p1.' + QUOTENAME(Value)
FROM dbo.SplitString(@columns,',')

FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)') 
                       , 1, 1, '');    
SET @sql = N'
   SELECT distinct ' + @columns2 + ', p1.*

      FROM  
   INNER JOIN 
   (SELECT 
     [CALF_AN]
         ,[CALF_NPERIODE]
         ,[CNT_ID]
         --,[PER_ID]
       ,[MontantAccoss]
     from [Reporting].[dbo].[TEMPAccoss]
     WHERE  [CALF_AN]=2014
   ) AS j
   PIVOT
   (
    sum([MontantAccoss])
     for [CALF_NPERIODE] in ('+@columns1+')
   ) AS p  ON p.CNT_ID = COT1.CNT_ID 
    INNER JOIN 
   (SELECT 
     [CALF_AN]
         ,[CALF_NPERIODE]
         ,[CNT_ID]
         --,[PER_ID]
       ,[MontantHorsAccoss]
     from [Reporting].[dbo].[TEMPHorsAccoss]
     WHERE  [CALF_AN]=2014
   ) AS j
   PIVOT
   (
    sum([MontantHorsAccoss])
     for [CALF_NPERIODE] in ('+@columns1+')
   ) AS p1  ON p1.CNT_ID = COT1.CNT_ID;';
   PRINT @sql;
   EXEC sp_executesql @sql;

我希望對sum([MontantAccoss])+sum([MontantHorsAccoss])樞軸 p 和樞軸 p2 的每一列進行求和?在我的情況下 select p.[1]+p1.[1],p.[2]+p1.[2],p.[3]+p1.[3]。任何想法?

也許創建一個@columns4這樣的:

SELECT @columns4 = STUFF(
 (
   SELECT  ',' + QUOTENAME('total' + Value) + '=p.' + QUOTENAME(Value)
                                            + '+p1.' + QUOTENAME(Value)
   FROM dbo.SplitString(@columns,',')
   FOR XML PATH(''), TYPE
 ).value('.', 'NVARCHAR(MAX)'),
 1,
 1,
 ''
);

(或修改@columns3您的程式碼目前似乎未使用的 )並將其添加到主查詢中。

引用自:https://dba.stackexchange.com/questions/76962