Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

MS SQL 2012 :W SQL Przesuń kolumny na lewą stronę, jeśli kolumna zawiera 0

Powinno to zrobić to, czego potrzebujesz (demo )

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 

Odwraca wartości kolumny po wierszu na raz.

Na przykład C3 nie zostanie przesunięte na

+---------+-------+-----+-------------+
| 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) wyrażenie zapewnia, że ​​wszystkie wartości od pierwszego niezerowego wzwyż mają to_preserve ustaw na 1 .

Następnie wybiera wartości za pomocą to_preserve flaga i używa ROW_NUMBER aby podać wartość, której można użyć do przestawienia się do właściwej nowej kolumny.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykłady konwersji „data” na „datetime” w SQL Server (T-SQL)

  2. Dodanie kolumny do wszystkich tabel użytkowników w t-sql

  3. Alert SQL, gdy procedura składowana jest wykonywana zbyt długo

  4. Jak pobrać obraz binarny z bazy danych za pomocą C# w ASP.NET?

  5. Jak wykonać porównanie niewrażliwe na akcent (e z è, é, ê i ë) w SQL Server?