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

sql . में उत्पाद की कीमत की तुलना

मुझे लगता है कि आप यही खोज रहे हैं।

SQLFiddle

यह बदसूरत है, लेकिन यहाँ थोड़ा टूटना है।

यह ब्लॉक आपको अपने मूल्यों की एक गतिशील सूची प्राप्त करने की अनुमति देता है। (यह याद नहीं कर सकता कि मैंने इसे किससे चुराया है, लेकिन यह बहुत बढ़िया है। इसके बिना, पिवट वास्तव में इसके लिए एक बड़े विशाल केस स्टेटमेंट दृष्टिकोण से बेहतर नहीं है।)

DECLARE @cols AS VARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' +
                        QUOTENAME(SellerName)
                      FROM Product_Price
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '')

आपका @cols वैरिएबल इस तरह निकलता है:

[Amazon],[eBay],[Sears]

फिर आपको अपनी पूरी क्वेरी की एक स्ट्रिंग बनानी होगी:

select @query = 
'select piv1.*, tt.sellername from (
select *
from
(select dt, product, SellerName,  sum(price) as price from product_price group by  dt, product, SellerName) t1

pivot (sum(price) for SellerName in (' + @cols + '))as bob
) piv1
inner join
(select t2.dt,t2.sellername,t1.min_price from
(select dt,  min(price) as min_price  from product_price group by  dt) t1
inner join (select dt,sellername, sum(price) as price from product_price group by dt,sellername) t2 on t1.min_price = t2.price) tt
on piv1.dt = tt.dt
'

piv1 व्युत्पन्न तालिका आपको पिवोटेड मान प्राप्त करती है। चतुराई से नामित tt व्युत्पन्न तालिका आपको वह विक्रेता देती है जिसकी प्रत्येक दिन के लिए न्यूनतम बिक्री होती है। (आपको बताया कि यह एक प्रकार का बदसूरत था।)

और अंत में, आप अपनी क्वेरी चलाते हैं:

execute(@query)

और आपको मिलता है:

 DT     PRODUCT     AMAZON  EBAY    SEARS   SELLERNAME
2012-01-16  AA  40  27  32  eBay
2012-01-17  BC  30  51.4    33.2    Amazon
2012-01-18  DE  11.1    9.4     13.5    eBay

(क्षमा करें, वह बिट लाइन अप नहीं कर सकता)।

मुझे लगता है कि अगर आपके पास एक रिपोर्टिंग टूल है जो क्रॉसटैब कर सकता है, तो वहां ऐसा करना बहुत आसान होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 30 दिनों से डेटा कैसे चुनें?

  2. SqlFunction DataAccessKind के बावजूद संदर्भ कनेक्शन खोलने में विफल रहता है। वर्तमान पढ़ें

  3. SQL सर्वर में Msg 8117 "संचालन डेटा प्रकार varchar योग ऑपरेटर के लिए अमान्य है" को ठीक करें

  4. SQL सर्वर 2016:एक डेटाबेस बनाएँ

  5. वर्ग घोषणा में SQL Server 2008 TIME कॉलम का उपयोग करना