Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं सारांश रिपोर्ट जैसे सारणीबद्ध प्रारूप में एक चुनिंदा क्वेरी परिणाम चाहता हूं

SQL Server 2008 में आप PIVOT क्वेरी के साथ इस कार्य को बहुत आसानी से संभाल सकते हैं। निम्न उदाहरण आपके डेटा को निम्न प्रारूप में प्राप्त करने पर निर्भर करता है (जो ऐसा लगता है कि आप पहले ही कर चुके हैं):

Name        Month    Value
----------  -------  -----
District 1  Month 1     10
District 1  Month 2      5
District 1  Month 3      6
District 2  Month 1      1
District 2  Month 2      2
District 2  Month 3      3
District 3  Month 1      8
District 3  Month 2      6
District 3  Month 3     11

अगर आप ऐसा कर सकते हैं, तो आपकी PIVOT क्वेरी कुछ इस तरह दिखनी चाहिए:

DECLARE @myTable AS TABLE([Name] VARCHAR(20), [Month] VARCHAR(20), [Value] INT)
INSERT INTO @myTable VALUES ('District 1', 'Month 1', 10)
INSERT INTO @myTable VALUES ('District 1', 'Month 2', 5)
INSERT INTO @myTable VALUES ('District 1', 'Month 3', 6)
INSERT INTO @myTable VALUES ('District 2', 'Month 1', 1)
INSERT INTO @myTable VALUES ('District 2', 'Month 2', 2)
INSERT INTO @myTable VALUES ('District 2', 'Month 3', 3)
INSERT INTO @myTable VALUES ('District 3', 'Month 1', 8)
INSERT INTO @myTable VALUES ('District 3', 'Month 2', 6)
INSERT INTO @myTable VALUES ('District 3', 'Month 3', 11)

SELECT [Name], [Month 1], [Month 2], [Month 3], [NameTotalValue] AS [Total]
FROM
(
      SELECT [Name], [Month], [Value], 
             SUM([Value]) OVER (PARTITION BY [Name]) as [NameTotalValue] 
      FROM @myTable
    UNION 
      SELECT 'Total', [Month], SUM([Value]), (SELECT SUM([Value]) FROM @myTable)
      FROM @myTable
      GROUP BY [Month]
) t
PIVOT
(
    SUM([Value]) FOR [Month] IN ([Month 1], [Month 2], [Month 3]) 
) AS pvt
ORDER BY pvt.[Name]

इस उदाहरण में, मैंने SUM([Value]) OVER PARTITION . का उपयोग किया है प्रत्येक जिले के लिए रकम प्राप्त करने के लिए, और फिर मैंने नीचे की ओर कुल पंक्ति जोड़ने के लिए एक यूनियन किया। परिणाम इस तरह दिखते हैं:

Name        Month 1 Month 2 Month 3 Total
----------- ------- ------- ------- -----
District 1       10       5       6    21
District 2        1       2       3     6
District 3        8       6      11    25
Total            19      13      20    52

इस दृष्टिकोण के बारे में एक बात आप देखेंगे कि आपको समय से पहले तालिका के शीर्ष पर इच्छित कॉलम नामों को जानना होगा। यदि आप रिपोर्ट को पूरे एक वर्ष तक चलाने के लिए सेट अप कर रहे हैं, तो यह करना आसान है, लेकिन यदि स्तंभों की संख्या में परिवर्तन होने वाला है तो यह अधिक कठिन है। यदि आप उपयोगकर्ताओं को एक कस्टम दिनांक सीमा (यानी, 07/2011-10/2011 या 06/2011-11/2011) निर्दिष्ट करने की अनुमति देने जा रहे हैं, तो उस आवश्यकता को संभालने का एक तरीका गतिशील SQL का उपयोग करके PIVOT क्वेरी बनाना है और फिर इसे sp_executesql के साथ निष्पादित करें ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर डेटाबेस कॉल के साथ मल्टी थ्रेडिंग C# एप्लिकेशन

  2. एंटिटी फ्रेमवर्क में datetime2 और ProviderManifestToken

  3. एक अद्वितीय पहचानकर्ता कॉलम जोड़ना और नई गाइड उत्पन्न करने के लिए डिफ़ॉल्ट जोड़ना

  4. निर्दिष्ट मॉड्यूल पाया नहीं जा सका। HRESULT से अपवाद:0x8007007E

  5. SQL सर्वर में किसी निर्दिष्ट स्थान पर सूची आइटम कैसे खोजें