2011-10-27 35 views
0

以下のクエリは正常に動作し、必要に応じてピボットテーブルを取得します。ドル金額は1月から12月にかけて上がります。さて、1月から12月までの列の合計をどのように追加するのですか?これらの月の列はピボットを使用して作成されるため、すべての月の値を追加して新しい列に表示する方法はわかりません。助けてもらえますか?私が探しているものをさらに明確にする必要があるかどうかを教えてください。sqlのピボット - ピボット列から総計の列を生成

ありがとうございます!セットまたはCUBE

グループ化セットをグループ化し

CREATE TABLE #t 
    (
     Region varchar(50), 
     Area varchar(255), 
     Market varchar(255), 
     MediaType varchar(50), 
     Campaign varchar(255), 
     Description varchar(255), 
     TotalCost money, 
     MonthDesc nvarchar(50), 
     [Year] int, 
     MonthNumber int 
    ) 
    DECLARE @List VARCHAR(8000), @SQL VARCHAR(8000) 
    SET @List = '' 
    SET @SQL = '' 

    INSERT INTO #t 
    SELECT 
     r.RegionName, 
     d.DistrictName, 
     dm.DMAName, 
     mt.MediaTypeDesc, 
     pn.PlanName, 
     pd.VendorPreference, 
     SUM(pd.DropAmount) AS TotalCost, 
     DATENAME(MONTH, pd.StartDate), 
     p.[Year], 
     DATEPART(MONTH, pd.StartDate) 
    FROM PlanDetails pd 
    INNER JOIN Plans p ON p.PlanId = pd.PlanId 
    INNER JOIN PlanNames pn ON pn.PlanNameId = p.PlanNameId 
    INNER JOIN DMA_Plans dp ON p.PlanId = dp.PlanId 
    INNER JOIN DMA dm ON dm.DMAId = dp.DMAId 
    INNER JOIN Centers c ON c.DMAId = dm.DMAId 
    INNER JOIN Districts d ON d.DistrictId = c.DistrictId 
    INNER JOIN Regions r ON r.RegionId = d.RegionId 
    INNER JOIN MediaTypes mt ON mt.MediaTypeId = pd.MediaTypeId 
    WHERE c.OrganizationId = 2 
    AND  p.[Year] = @Year 
    AND  pd.StartDate IS NOT NULL 
    AND  p.Active = 1 
    AND  c.DMAId IS NOT NULL 
    AND  pd.MediaTypeId IS NOT NULL 
    GROUP BY r.RegionName, 
       d.DistrictName, 
       dm.DMAName, 
       mt.MediaTypeDesc, 
       pn.PlanName, 
       pd.VendorPreference, 
       pd.StartDate, 
       p.[Year] 

    DECLARE @TblY TABLE(ODate nvarchar(50), oYear int, oMonthOrder int) 
    INSERT @TblY 
    SELECT DISTINCT MonthDesc, [Year], MonthNumber FROM [#t] ORDER BY MonthNumber 

    SELECT @List = ISNULL(@List,'') + CASE WHEN ISNULL(@List,'') = '' THEN '[' + ODate + ']' ELSE ',[' + ODate + ']' end 
    FROM @TblY 
    ORDER BY oMonthOrder 

    SET @SQL = 'Select Region, Area, Market, MediaType, Campaign, Description, ' + @List + char(13) 
    SET @SQL = @SQL + 'From (Select Region, Area, Market, MediaType, Campaign, Description, MonthDesc, TotalCost ' + char(13) 
    SET @SQL = @SQL + 'FROM #t F) P ' + char(13) 
    SET @SQL = @SQL + 'Pivot (SUM(TotalCost) For MonthDesc In (' + @List + ')) as Pvt' + char(13) 


    PRINT @SQL 
    EXEC (@SQL) 

    DROP TABLE #t 

答えて

1

使用することは基本的に声明によって複数のグループです。 副選択としてあなたピボットの治療と組み合わせると、あなたは同じ結果が手探りセットに

詳細情報を設定し、すべてにaggregrateの合計を達成するために迅速かつ簡単な方法を持っている http://msdn.microsoft.com/en-us/library/bb522495.aspx http://blogs.msdn.com /b/sreekarm/archive/2008/12/28/grouping-sets-in-sql-server-2008.aspx

関連する問題