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

SQL सर्वर 2008 लंबवत डेटा क्षैतिज करने के लिए

आप डेटा की अपनी पंक्तियों को कॉलम में बदलने के लिए PIVOT फ़ंक्शन का उपयोग कर सकते हैं।

आपकी मूल क्वेरी का उपयोग सभी डेटा को पुनः प्राप्त करने के लिए किया जा सकता है, केवल एक ही परिवर्तन मैं इसमें करूँगा b.field_id कॉलम को बाहर करना होगा क्योंकि यह परिणाम के अंतिम प्रदर्शन को बदल देगा।

यदि आपके पास field_name . की एक ज्ञात सूची है वे मान जिन्हें आप कॉलम में बदलना चाहते हैं, फिर आप अपनी क्वेरी को हार्ड-कोड कर सकते हैं:

select app_id,
  [First Name], [Last Name], [DOB],
  [Mailing Addr], [Zip]
from
(
  SELECT 
     a.app_id, 
     c.field_name,
     b.field_value 
  FROM table1 a
  INNER JOIN table2 b 
    ON a.app_id = b.app_id
  INNER JOIN table3 c 
    ON b.field_id = c.field_id 
) d
pivot
(
  max(field_value)
  for field_name in ([First Name], [Last Name], [DOB],
                     [Mailing Addr], [Zip])
) piv;

डेमो के साथ SQL Fiddle देखें।

लेकिन अगर आपके पास field_name . के लिए अज्ञात संख्या में मान होने वाले हैं , तो आपको परिणाम प्राप्त करने के लिए गतिशील SQL लागू करने की आवश्यकता होगी:

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

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

set @query = 'SELECT app_id,' + @cols + ' 
            from 
            (
              SELECT 
                 a.app_id, 
                 c.field_name,
                 b.field_value 
              FROM table1 a
              INNER JOIN table2 b 
                ON a.app_id = b.app_id
              INNER JOIN table3 c 
                ON b.field_id = c.field_id 
            ) x
            pivot 
            (
                max(field_value)
                for field_name in (' + @cols + ')
            ) p '

execute sp_executesql @query;

डेमो के साथ SQL Fiddle देखें। इन दोनों का यह परिणाम देगा:

| APP_ID | FIRST NAME | LAST NAME |      DOB |    MAILING ADDR |   ZIP |
------------------------------------------------------------------------
|   1234 |        Joe |     Smith | 10/15/72 |     PO Box 1234 | 12345 |
|   1239 |        Bob |   Johnson | 12/01/78 | 1234 N Star Ave | 12456 |


  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. इंटीग्रेटेड सिक्योरिटी =ट्रू और इंटीग्रेटेड सिक्योरिटी =SSPI में क्या अंतर है?

  3. MSSQL डेटाबेस तालिका से निकटतम देशांतर और अक्षांश प्राप्त करें?

  4. कैसे जांचें कि SQL सर्वर में कोई डेटाबेस मौजूद है या नहीं?

  5. आप उसी सर्वर पर प्रतिलिपि के रूप में डेटाबेस का बैकअप और पुनर्स्थापना कैसे करते हैं?