sql >> Database teknologi >  >> RDS >> Sqlserver

MS SQL 2012:I SQL Skift kolonner til venstre, hvis kolonnen indeholder 0

Dette burde gøre, hvad du har brug for (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 

Det fjerner pivoteringen af ​​kolonneværdierne en række ad gangen.

For eksempel C3 vil ende op upivot til

+---------+-------+-----+-------------+
| 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) udtryk sikrer, at alle værdier fra den første ikke-nul og fremefter har to_preserve indstillet til 1 .

Derefter vælger den værdierne med to_preserve flag og bruger ROW_NUMBER for at give en værdi, der kan bruges til at pivotere ind i den korrekte nye kolonne.




  1. Sikring af MySQL-server

  2. Tabel- eller kolonnenavn kan ikke starte med numerisk?

  3. Lagring og hentning af billedsti i databasen mysql php

  4. Ydeevne af MySQL Insert-sætninger i Java:Batch-tilstand forberedte sætninger vs enkelt insert med flere værdier