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

एसक्यूएल पिवट टेबल डायनेमिक

यहां आप पिवट में कॉलम के रूप में दिखाने के लिए कॉलम में मानों का चयन करेंगे

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + AvJT + ']', '[' + AvJT + ']')
               FROM    (SELECT DISTINCT AvJT FROM YourTable) PV  
               ORDER BY AvJT

अब क्वेरी को पिवट करें

DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM 
             (
                 SELECT date_1, StartHour,AvJT, data_source 
                 FROM YourTable
             ) x
             PIVOT 
             (
                 -- Values in each dynamic column
                 SUM(data_source)
                 FOR AvJT IN (' + @cols + ')                      
            ) p;' 

EXEC SP_EXECUTESQL @query

यदि आप ऐसा करना चाहते हैं जहां कॉलम नाम गतिशील नहीं हैं, तो आप नीचे दी गई क्वेरी कर सकते हैं

SELECT DATE_1,STARTHOUR,
MIN(CASE WHEN AvJT='00001a' THEN data_source END) [00001a],
MIN(CASE WHEN AvJT='00002a' THEN data_source END) [00002a],
MIN(CASE WHEN AvJT='00003a' THEN data_source END) [00003a],
MIN(CASE WHEN AvJT='00004a' THEN data_source END) [00004a]
FROM YOURTABLE
GROUP BY  DATE_1,STARTHOUR

संपादित करें:

मैं आपके अपडेट किए गए प्रश्न के लिए अपडेट कर रहा हूं।

data_source को फ़िल्टर करने के लिए वैरिएबल घोषित करें

DECLARE @DATASOURCE VARCHAR(20) = '1' 

QUOTENAME . के बजाय , आप पिवट के लिए कॉलम प्राप्त करने के लिए किसी अन्य प्रारूप का उपयोग कर सकते हैं

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + Link_ID + ']', '[' + Link_ID + ']')
               FROM    (SELECT DISTINCT Link_ID FROM C1_May_Routes WHERE [email protected]) PV  
               ORDER BY Link_ID

अब पिवट करें

DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM 
             (
                 -- We will select the data that has to be shown for pivoting
                 -- with filtered data_source
                 SELECT date_1, StartHour,AvJT, Link_ID
                 FROM C1_May_Routes
                 WHERE data_source = '[email protected]+'
             ) x
             PIVOT 
             (
                 -- Values in each dynamic column
                 SUM(AvJT)
                 -- Select columns from @cols 
                 FOR Link_ID IN (' + @cols + ')                      
            ) p;' 

EXEC SP_EXECUTESQL @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. क्या लेन-देन के अंदर (SQL सर्वर के भीतर) कई DDL स्टेटमेंट चलाना संभव है?

  2. CAST का उपयोग करते समय VARCHAR के लिए डिफ़ॉल्ट लंबाई 30 क्यों है?

  3. दो सिंक्रोनस प्रतिकृतियों के बीच हमेशा उपलब्धता समूहों पर SQL सर्वर कॉन्फ़िगर करें। भाग 2

  4. SQL सर्वर में एकाधिक रिक्त स्थान की स्ट्रिंग वापस करने के 3 तरीके

  5. विभिन्न एल्गोरिदम का उपयोग करके यूयूआईडी टकराव का जोखिम