एसक्यूएल में पिवट - पिवट कॉलम से ग्रोटल कॉलम उत्पन्न करें

नीचे प्रश्न ठीक काम करता है और मुझे आवश्यकतानुसार पिवट तालिका मिलती है। जनवरी से दिसंबर तक डॉलर की रकम ठीक दिखाई देती है। अब, मैं कुल कॉलम कैसे जोड़ूं जो मुझे जनवरी से दिसंबर तक कुल पंक्ति देगा? चूंकि इन महीनों का स्तंभ पिवट का उपयोग करके बनाया गया है, इसलिए मुझे यकीन नहीं है कि सभी महीनों के लिए मूल्य कैसे जोड़ना है और इसे एक नए कॉलम में प्रदर्शित करना है। क्या आप मदद कर सकतें है? मुझे बताएं कि क्या आपको जो चाहिए, उस पर आपको अधिक स्पष्टीकरण की आवश्यकता है।

अग्रिम में धन्यवाद!

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 उत्तर

समूह सेट या क्यूब का प्रयोग करें

ग्रुपिंग सेट मूल रूप से कथन द्वारा एक बहु समूह है। अपने पिवट को उप-चयन के रूप में पेश करने के साथ इसे संयोजित करें और आपके पास एक ही परिणाम सेट में कुल मिलाकर कुल मिलाकर एक त्वरित और आसान तरीका है

ग्रोपिंग सेट पर अधिक जानकारी 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
जोड़ा