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

T-SQL में PIVOT फंक्शन को समझना

एक PIVOT डेटा को एक कॉलम से कई कॉलम में घुमाने के लिए उपयोग किया जाता है।

आपके उदाहरण के लिए यहां एक स्टेटिक पिवट है जिसका अर्थ है कि आप उन कॉलमों को हार्ड कोड करते हैं जिन्हें आप घुमाना चाहते हैं:

create table temp
(
  id int,
  teamid int,
  userid int,
  elementid int,
  phaseid int,
  effort decimal(10, 5)
)

insert into temp values (1,1,1,3,5,6.74)
insert into temp values (2,1,1,3,6,8.25)
insert into temp values (3,1,1,4,1,2.23)
insert into temp values (4,1,1,4,5,6.8)
insert into temp values (5,1,1,4,6,1.5)

select elementid
  , [1] as phaseid1
  , [5] as phaseid5
  , [6] as phaseid6
from
(
  select elementid, phaseid, effort
  from temp
) x
pivot
(
  max(effort)
  for phaseid in([1], [5], [6])
)p

यहाँ एक कार्यशील संस्करण के साथ एक SQL डेमो है।

यह एक गतिशील PIVOT के माध्यम से भी किया जा सकता है जहाँ आप गतिशील रूप से स्तंभों की सूची बनाते हैं और PIVOT करते हैं।

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.phaseid) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT elementid, ' + @cols + ' from 
            (
                select elementid, phaseid, effort
                from temp
           ) x
            pivot 
            (
                 max(effort)
                for phaseid in (' + @cols + ')
            ) p '


execute(@query)

दोनों के परिणाम:

ELEMENTID   PHASEID1    PHASEID5    PHASEID6
3           Null        6.74        8.25
4           2.23        6.8         1.5


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पंक्ति 1, कॉलम 4 (वर्ष) के लिए बल्क लोड डेटा रूपांतरण त्रुटि (निर्दिष्ट कोडपेज के लिए बेमेल या अमान्य वर्ण टाइप करें)

  2. मैं SQL सर्वर क्वेरी कैश को कैसे साफ़ कर सकता हूँ?

  3. आप TSQL का उपयोग करके डेटाबेस में सभी तालिकाओं को कैसे काटते हैं?

  4. OFFSET/FETCH का उपयोग कर SQL सर्वर में पेजिनेशन

  5. ब्रेंट ओजर SQL सर्वर आंतरिक और बाहरी विखंडन की व्याख्या करता है