Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

MS SQL 2012:Trong SQL Dịch chuyển cột sang bên trái nếu cột chứa 0

Điều này sẽ làm những gì bạn cần ( bản trình diễn )

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 

Nó bỏ chia các giá trị cột thành một hàng tại một thời điểm.

Ví dụ C3 sẽ không được chia thành

+---------+-------+-----+-------------+
| 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) biểu thức đảm bảo tất cả các giá trị từ giá trị khác không đầu tiên trở đi có to_preserve đặt thành 1 .

Sau đó, nó chọn các giá trị với to_preserve gắn cờ và sử dụng ROW_NUMBER để cung cấp một giá trị có thể được sử dụng để xoay vào đúng cột mới.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo truy vấn tổng hợp trong máy chủ sql mà không có hàm tổng hợp

  2. Thực thi sp_executeSql cho select ... vào #table nhưng không thể chọn ra dữ liệu bảng tạm thời

  3. Các khoảng thời gian cô đặc với SQL

  4. SQL Server:sử dụng tham số trong TẠO CƠ SỞ DỮ LIỆU

  5. VS 2010 xây dựng dự án cơ sở dữ liệu nhận SQL04151