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

उत्पाद बिक्री प्रदर्शित करने के लिए SQL क्वेरी

आप SUM और CASE कथनों का उपयोग करके डेटा एकत्र कर सकते हैं।

अपनी तालिका परिभाषाओं का उपयोग करना (और कुछ बहुत ही न्यूनतम तैयार किए गए डेटा), यहां एक उदाहरण दिया गया है कि आप इसे कैसे कर सकते हैं:

--** Create test tables
DECLARE @SalesLog TABLE ( 
SalesID int IDENTITY(1,1) NOT NULL, 
MemoNo int NULL, 
ProductCode int NULL, 
Quantity int NULL, 
Price int NULL, 
ProductGroup int NULL)

DECLARE @Products TABLE( 
ProductId int IDENTITY(1,1) NOT NULL, 
pName nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
pSize int NULL, 
pPrice int NULL, 
pPackQty int NULL, 
pGroup int NULL, 
pCode int NULL, 
pStock int NULL, 
pYrStock int NULL, 
pClearStock int NULL)

--** Setup test data
INSERT INTO @SalesLog ( MemoNo, ProductCode, Quantity, Price, ProductGroup)
SELECT   0, 1, 500, 0, 1 UNION
SELECT   0, 2, 700, 0, 1 UNION   
SELECT   0, 2, 333, 0, 1 UNION   
SELECT   0, 3, 200, 0, 2 UNION
SELECT   0, 4, 125, 0, 2 ;

INSERT INTO @Products (pName, pSize, pPrice, pPackQty, pGroup, pCode, pStock, pYrStock, pClearStock)
SELECT 'Beer', 350, 1 , 1, 1, 1, 0, 0, 0 UNION
SELECT 'Beer', 650, 1 , 1, 1, 2, 0, 0, 0 UNION
SELECT 'Beer', 1000, 1 , 1, 1, 3, 0, 0, 0 UNION
SELECT 'Wine', 750, 1 , 1, 2, 4, 0, 0, 0 UNION 
SELECT 'Wine', 1000, 1 , 1, 2, 5, 0, 0, 0 ;

--** Example query
SELECT t.pName AS 'Product'
     , MAX(CASE WHEN t.Col = 1 THEN t.pSize END) AS 'Item Size'
     , ISNULL(SUM(CASE WHEN t.Col = 1 THEN t.Quantity END),0) AS 'Quantity'
     , MAX(CASE WHEN t.Col = 2 THEN t.pSize END) AS 'Item Size'
     , ISNULL(SUM(CASE WHEN t.Col = 2 THEN t.Quantity END),0) AS 'Quantity'
     , MAX(CASE WHEN t.Col = 3 THEN t.pSize END) AS 'Item Size'
     , ISNULL(SUM(CASE WHEN t.Col = 3 THEN t.Quantity END),0) AS 'Quantity'
FROM (
SELECT pName
     , pCode
     , pGroup
     , pSize
     , sl.Quantity
     , DENSE_RANK() OVER(PARTITION BY p.pGroup ORDER BY p.pSize) AS Col
  FROM @Products AS p
  LEFT JOIN @SalesLog AS sl
    ON p.pGroup = sl.ProductGroup
   AND p.pCode = sl.ProductCode
     ) AS t
 GROUP BY t.pGroup
     , t.pName
;   

क्वेरी DENSE_RANK फ़ंक्शन का उपयोग किसी आकार के आइटम को एक साथ समूहित करने और उन्हें आकार के बढ़ते क्रम में क्रमित करने के लिए करती है और इसका उपयोग यह पता लगाने के लिए किया जाता है कि डेटा को किस कॉलम में लिखा जाना चाहिए।

हालाँकि SQL Server 2005 और इसके बाद के संस्करण में एक PIVOT ऑपरेटर है, लेकिन जब आपके पास अलग-अलग कॉलम हेडिंग टाइप (इस मामले में आइटम का आकार और मात्रा) हो तो यह बहुत मददगार नहीं होता है।

आपको उत्पाद आकार की अधिकतम संख्या तय करनी होगी, जिस पर आप रिपोर्ट करना चाहते हैं क्योंकि यह क्वेरी में हार्ड कोडित है। तो यदि उत्पाद आकार की अधिकतम संख्या 3 है तो आप ऊपर दिखाए गए अनुसार क्वेरी को कोड करते हैं। यदि, हालांकि, आपके उत्पादों में से एक में 4 अलग-अलग आकार हैं, तो आप t.Col =4 और इसी तरह के लिए अतिरिक्त आइटम आकार और कॉलम की मात्रा जोड़ी जोड़ने जा रहे हैं।

मुझे आशा है कि यह मदद करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कोल्डफ्यूजन:दिनांक फ़ील्ड में शून्य मानों से निपटना

  2. इनपुट के रूप में रिकॉर्ड-आईडी की सूची का उपयोग करके SQL सर्वर में 4 मिलियन रिकॉर्ड अपडेट करना

  3. मैं डेटाबेस कैसे संलग्न कर सकता हूं?

  4. क्या होता है जब मैं SQL 2005 में संकुल प्राथमिक कुंजी छोड़ता हूँ

  5. एसक्यूएल सर्वर में तालिका से विभाजित अल्पविराम सेपरेट मूल्य