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

कॉलम के रूप में दिनांक के साथ गतिशील रूप से कैसे पिवट करें?

यहां आपकी नमूना तालिका है

SELECT * INTO #Names
FROM
(
SELECT 1 ID,'ITEM1' NAME 
UNION ALL
SELECT 2 ID,'ITEM2' NAME 
)TAB

SELECT * INTO #Stockdates
FROM
(      
SELECT 1 ID,1 NAMEID,8 STOCK,'2-1-2014 ' [DATE]
UNION ALL
SELECT 2 ID,2 NAMEID,2 STOCK,'4-1-2014 ' [DATE]
)TAB

जॉइन डेटा को टेम्परेरी टेबल पर रखें

SELECT N.NAME,S.[DATE],S.STOCK 
INTO #TABLE
FROM #NAMES N
JOIN #Stockdates S ON N.ID=S.NAMEID

पिवट के लिए कॉलम प्राप्त करें

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
               '[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
               FROM    (SELECT DISTINCT [DATE] FROM #TABLE) PV  
               ORDER BY [DATE]

अब इसे पिवट करें

DECLARE @query NVARCHAR(MAX)
SET @query = '           
              SELECT * FROM 
             (
                 SELECT * FROM #TABLE
             ) x
             PIVOT 
             (
                 SUM(STOCK)
                 FOR [DATE] 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. शून्य या शून्य मानों को अनदेखा करते हुए AVG प्राप्त करें

  2. SQL सर्वर (T-SQL) में किसी दिनांक से ISO सप्ताह संख्या लौटाएँ

  3. SQL सर्वर कार्य इतिहास प्राप्त करने के 4 तरीके

  4. किसी अन्य तालिका से डेटा का उपयोग करके परिकलित कॉलम बनाएं

  5. SQRT () SQL सर्वर में उदाहरण