sql'de pivot - pivot kolonlardan grandtotal sütun oluşturur

Sorgunun altında çalışıyor ve pivot tabloyu gerektiği gibi aldım. Dolar miktarları ocak ayından Aralık ayına kadar iyi durumda. Şimdi, Ocak'tan Aralık ayına kadar bir satır toplam verecek bir toplam sütun nasıl eklerim? Bu ay sütunu pivot kullanılarak oluşturulduğundan, tüm ayların değerlerini nasıl ekleyeceğimi bilmiyorum ve bunu yeni bir sütunda göstereceğim. Lütfen yardım eder misiniz? Aradığım şey hakkında daha fazla açıklama gerekiyorsa bana bildirin.

Şimdiden teşekkürler!

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
0

1 cevap

Gruplama kümelerini veya CUBE'yi kullan

Gruplama kümeleri temelde ifade ile birden çok gruptur. Pivotunuzu bir alt seçim olarak ele alarak birleştirin ve aynı sonuç kümesinde bir toplayıcı toplamı elde etmenin hızlı ve kolay bir yoluna sahip olursunuz.

Groping setleri hakkında daha fazla bilgi 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

1
katma