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

एमएस एसक्यूएल 2012:एसक्यूएल शिफ्ट कॉलम में बाईं ओर यदि कॉलम में 0 . है

यह वही करेगा जो आपको चाहिए (डेमो )

SELECT i.cust_id,
       oa.*
FROM   input_table i
       OUTER APPLY (SELECT pvt.*
                    FROM   (SELECT month,
                                   col = CONCAT('month', ROW_NUMBER() OVER (ORDER BY idx))
                            FROM   (SELECT month,
                                           idx,
                                           to_preserve = MAX(IIF(month=0,0,1)) OVER (ORDER BY idx)
                                    FROM   (VALUES (1, month1),
                                                   (2, month2),
                                                   (3, month3),
                                                   (4, month4),
                                                   (5, month5) ) V(idx, month)) unpvt
                            WHERE  to_preserve = 1) t 
                            PIVOT (MAX(month) FOR col IN (month1, month2, month3, month4, month5)) pvt
                            ) oa 

यह एक बार में कॉलम के मानों को एक पंक्ति से हटा देता है।

उदाहरण के लिए C3 अंत में

. पर वोट नहीं किया जाएगा
+---------+-------+-----+-------------+
| cust_id | month | idx | to_preserve |
+---------+-------+-----+-------------+
| c3      |     0 |   1 |           0 |
| c3      |     0 |   2 |           0 |
| c3      |   100 |   3 |           1 |
| c3      |     0 |   4 |           1 |
| c3      |     0 |   5 |           1 |
+---------+-------+-----+-------------+

MAX(IIF(month=0,0,1)) OVER (ORDER BY idx) अभिव्यक्ति सुनिश्चित करती है कि पहले गैर शून्य से सभी मान to_preserve . हों 1 . पर सेट करें .

फिर यह to_preserve . के साथ मानों का चयन करता है ध्वजांकित करें और ROW_NUMBER . का उपयोग करें एक मान प्रदान करने के लिए जिसका उपयोग सही नए कॉलम में पिवोट करने के लिए किया जा सकता है।




  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 सर्वर 2008 पर EXCEPTION_ACCESS_VIOLATION कैसे डिबग कर सकता हूं?

  2. Sql सर्वर में सिंगल केस स्टेटमेंट में कई कंडीशन को मिलाना

  3. एक पदानुक्रम तालिका में किसी आइटम के सभी माता-पिता को सीमांकित स्ट्रिंग के रूप में सूचीबद्ध करना SQL

  4. कॉलम नाम के साथ अनपिवट करें

  5. SQL सर्वर में यूनिक्स टाइमस्टैम्प को दिनांक/समय मान में कैसे परिवर्तित करें