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

एसक्यूएल क्वेरी में गतिशील रूप से जेनरेट किए गए कॉलम शीर्षक

मैंने इस गतिशील धुरी समस्या को अलग-अलग बार देखा। और मेरे पास यह था। बहुत खोज करने के बाद मैं एक समाधान पर आया जो मेरे लिए बहुत अच्छा काम करता है। यह इतना सुंदर नहीं है, लेकिन इसने मुझे बचा लिया। मैं जो करता हूं वह पहले अस्थायी तालिका में डेटा तैयार करता है, उसके बाद मैं गतिशील रूप से पिवट स्ट्रिंग बना देता हूं (आपके मामले में यह डीडी-एमएम है) इसे एक चर के लिए असाइन करता है। और अंत में मैं गतिशील एसक्यूएल के रूप में निष्पादित करने के लिए एक एसक्यूएल स्ट्रिंग का निर्माण करता हूं ।

मैंने आपका नमूना डेटा इस्तेमाल किया और ऐसा लगता है कि यह काम करता है। आशा है कि यह मदद करता है

select 
    userid,
         browsername, 
         CAST(day(logintime) as nvarchar(2)) + '-' + CAST(Month(logintime) AS nVARCHAR(2))  AS period  
INTO #TMP
from user_log_table order by 1

DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' 
                    + QUOTENAME(convert(varchar(10), period, 120)) 
                from #TMP order by 1
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query = 'SELECT userid, browsername,' + @cols + ' from 
         (
            select userid, browsername, period
            from #TMP
        ) x
        pivot 
        (
            count(period)
            for period in (' + @cols + ')
        ) p '
exec(@query)
drop table #TMP


  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 सर्वर (T-SQL) में PATINDEX () फ़ंक्शन कैसे काम करता है

  2. SQL सर्वर - एक घोषित चर के साथ खंड में

  3. बीसीपी उपयोगिता और एसक्यूएल सर्वर 2008 का उपयोग करके कॉलम हेडर (कॉलम नाम) के साथ फाइल करने के लिए निर्यात तालिका

  4. SQL सर्वर डिफ़ॉल्ट दिनांक समय टिकट?

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