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

SQL सर्वर में 'पिवट' का उपयोग करके पंक्तियों को कॉलम में बदलें

यदि आप SQL Server 2005+ का उपयोग कर रहे हैं, तो आप PIVOT . का उपयोग कर सकते हैं डेटा को पंक्तियों से कॉलम में बदलने के लिए कार्य करता है।

ऐसा लगता है कि यदि सप्ताह अज्ञात हैं तो आपको गतिशील एसक्यूएल का उपयोग करने की आवश्यकता होगी, लेकिन शुरुआत में हार्ड-कोडेड संस्करण का उपयोग करके सही कोड देखना आसान है।

सबसे पहले, यहाँ कुछ त्वरित तालिका परिभाषाएँ और उपयोग के लिए डेटा हैं:

CREATE TABLE yt 
(
  [Store] int, 
  [Week] int, 
  [xCount] int
);
    
INSERT INTO yt
(
  [Store], 
  [Week], [xCount]
)
VALUES
    (102, 1, 96),
    (101, 1, 138),
    (105, 1, 37),
    (109, 1, 59),
    (101, 2, 282),
    (102, 2, 212),
    (105, 2, 78),
    (109, 2, 97),
    (105, 3, 60),
    (102, 3, 123),
    (101, 3, 220),
    (109, 3, 87);

यदि आपके मान ज्ञात हैं, तो आप क्वेरी को हार्ड-कोड करेंगे:

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

SQL डेमो देखें

फिर यदि आपको गतिशील रूप से सप्ताह संख्या उत्पन्न करने की आवश्यकता है, तो आपका कोड होगा:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,' + @cols + ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in (' + @cols + ')
            ) p '

execute(@query);

SQL डेमो देखें।

गतिशील संस्करण, week . की सूची तैयार करता है संख्याएं जिन्हें कॉलम में परिवर्तित किया जाना चाहिए। दोनों एक ही परिणाम देते हैं:

| STORE |   1 |   2 |   3 |
---------------------------
|   101 | 138 | 282 | 220 |
|   102 |  96 | 212 | 123 |
|   105 |  37 |  78 |  60 |
|   109 |  59 |  97 |  87 |


  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. एक डेटाबेस से दूसरे डेटाबेस में डेटा ट्रांसफर करें

  3. T-SQL का उपयोग करके SQL सर्वर में एक CHECK बाधा को संशोधित करें

  4. मैं SQL सर्वर क्वेरी में सप्ताहांत के दिनों को कैसे निकालूँ?

  5. एसक्यूएल में, आप श्रेणियों में समूह कैसे कर सकते हैं?