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

PIVOT का उपयोग करते समय SQL Server 2012 में सही SUM मान नहीं मिल रहा है

निम्नलिखित प्रश्न आपको वह देना चाहिए जो आप चाहते हैं:

SELECT Store,
       TotalSold,
       [John] AS WastedByJohn,
       [Jim] AS WastedByJim,
       [Alex] AS WastedByAlex
FROM (SELECT Store, Employee, Waste,
             SUM(Sold) OVER (PARTITION BY Store) AS TotalSold
      FROM #Foo) src
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

यह समझने के लिए कि आपको अनपेक्षित परिणाम क्यों मिलते हैं, GROUP BY . के बिना अपनी क्वेरी आज़माएं खंड:

SELECT Store, Sold, [John], [Jim], [Alex]
FROM 
    #Foo
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

आउटपुट:

Store       Sold    John    Jim     Alex
Harrisburg  20,00   20,00   10,00   NULL
Seattle     20,00   NULL    10,00   10,00

अब, नमूना डेटा के दूसरे संस्करण के साथ फिर से यही प्रयास करें:

आउटपुट:

Store       Sold    John    Jim     Alex
Harrisburg  25,00   10,00   NULL    NULL
Harrisburg  30,00   10,00   NULL    NULL
Harrisburg  40,00   NULL    10,00   NULL
Seattle     50,00   NULL    10,00   NULL
Seattle     60,00   NULL    NULL    10,00

2 अलग-अलग परिणाम सेट की तुलना करके आप स्पष्ट रूप से देख सकते हैं कि PIVOT इसमें भाग नहीं लेने वाले स्तंभों के प्रत्येक संयोजन के लिए होता है, अर्थात Store के प्रत्येक संयोजन के लिए , Sold

पहले मामले में केवल Harrisburg,20,00 है और Seattle,20,00 . इसलिए आपको इस मामले में केवल दो पंक्तियाँ मिलती हैं। दूसरे मामले में आपके पास कुल 3 + 2 =5 संयोजन हैं।

अब आप देख सकते हैं कि क्यों GROUP BY केवल दूसरे मामले में काम करता है।



  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 सर्वर 2008 पर एक अक्षम अनुक्रमणिका कैसे ढूंढूं?

  2. 120 से अधिक तालिकाओं से 12-15 जीबी डेटा खींचने वाली क्वेरी

  3. SQL - एक रिकॉर्ड और उसके वंशजों को क्लोन करें

  4. एसक्यूएल डॉट नोटेशन

  5. एक चयन पर SQL सर्वर ROWLOCK यदि मौजूद नहीं है INSERT लेनदेन