Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

MS SQL 2012 :Dalam SQL Geser kolom ke sisi kiri jika kolom berisi 0

Ini akan melakukan apa yang Anda butuhkan (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 

Ini melepaskan nilai kolom satu per satu.

Misalnya C3 akan berakhir dengan unpivoted ke

+---------+-------+-----+-------------+
| 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) ekspresi memastikan semua nilai dari yang pertama bukan nol dan seterusnya memiliki to_preserve setel ke 1 .

Kemudian memilih nilai dengan to_preserve menandai dan menggunakan ROW_NUMBER untuk memberikan nilai yang dapat digunakan untuk memutar ke kolom baru yang benar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prosedur atau fungsi mengharapkan parameter , yang tidak disediakan

  2. Bagaimana saya bisa melakukan DAN BIT OPERATOR antara dua bidang varbinary dalam SQL

  3. Bagaimana Anda membuat daftar kunci utama dari tabel SQL Server?

  4. TSQL - buat proc tersimpan di dalam pernyataan transaksi

  5. SQL 2005 Dapatkah saya menggunakan kata kunci seperti dalam pernyataan kasus?