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

किसी तालिका से कॉलम हेडर के रूप में मानों का चयन करना

आपने RDBMS निर्दिष्ट नहीं किया है, यदि आप जानते हैं कि कितने स्तंभों को बदलना है तो आप मानों को हार्ड-कोड कर सकते हैं:

select FileId,
  max(case when property = 'Name' then value end) Name,
  max(case when property = 'Size' then value end) Size,
  max(case when property = 'Type' then value end) Type
from yourtable
group by FileId

यह मूल रूप से एक PIVOT है फ़ंक्शन, कुछ RDBMS में एक PIVOT होगा , यदि आप ऐसा करते हैं तो आप निम्न का उपयोग कर सकते हैं, PIVOT SQL सर्वर, Oracle में उपलब्ध है:

select *
from 
(
  select FileId, Property, Value
  from yourTable
) x
pivot
(
  max(value)
  for property in ([Name], [Size], [Type])
) p

यदि आपके पास रूपांतरित करने के लिए अज्ञात संख्या में स्तंभ हैं, तो आप एक गतिशील PIVOT . का उपयोग कर सकते हैं . यह रन-टाइम पर बदलने के लिए कॉलम की सूची प्राप्त करता है:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(property) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select FileId, Property, Value
                from yourtable
            ) x
            pivot 
            (
                max(value)
                for Property in (' + @cols + ')
            ) p '

execute(@query)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दशमलव गलत तरीके से C# से SQL सर्वर में TableAdapters के साथ पारित हो गया

  2. किसी प्रोफ़ाइल से डेटाबेस मेल खाता निकालें (SSMS)

  3. SQL सर्वर में एकल पंक्तियों से कई तार कैसे निकालें?

  4. SQL सर्वर में एक स्कीमा बाउंड UDF बनाएँ

  5. सी # से SQL सर्वर 2008 में डेटाटेबल पास करना