Tôi cần chuyển dữ liệu (cột) sang bên trái nếu cột đầu tiên (cột bên trái) có giá trị 0 và NULL phải được thêm vào cột bên phải. Khi giá trị khác 0 được tìm thấy trong bất kỳ cột nào thì giá trị 0 trong cột sau sẽ vẫn giữ nguyên.MS SQL 2012: Trong cột SQL Shift sang bên trái nếu cột chứa 0
Input Dữ liệu: -
cust_id month1 month2 month3 month4 month5
c1 100 200 300 400 500
c2 0 0 50 250 350
c3 0 0 100 0 0
c4 100 0 100 0 500
c5 0 0 0 0 0
Dự kiến Output Kết quả: -
cust_id month1 month2 month3 month4 month5
c1 100 200 300 400 500
c2 50 250 350 NULL NULL
c3 100 0 0 NULL NULL
c4 100 0 100 0 500
c5 NULL NULL NULL NULL NULL
Một công việc xung quanh tĩnh có thể là:
IF month1=0 and month2=0 and month3=0 and month4=0 and month5=0
THEN INSERT INTO TABLE output_table AS SELECT cust_id,'NULL','NULL','NULL','NULL','NULL' FROM input_table
IF month1=0 and month2=0 and month3=0 and month4=0 and month5 != 0
THEN INSERT INTO TABLE output_table AS SELECT cust_id,month5,'NULL','NULL','NULL','NULL' FROM input_table
IF month1=0 and month2=0 and month3=0 and month4 != 0 and month5 != 0
THEN INSERT INTO TABLE output_table AS SELECT cust_id,month4,month5,'NULL','NULL','NULL' FROM input_table
IF month1=0 and month2=0 and month3 !=0 and month4 != 0 and month5 != 0
THEN INSERT INTO TABLE output_table AS SELECT cust_id,month3,month4,month5,'NULL','NULL' FROM input_table
IF month1 != 0 and month2 != 0 and month3 !=0 and month4 != 0 and month5 != 0
THEN INSERT INTO TABLE output_table AS SELECT cust_id,month1,month2,month3,month4,month5,'NULL' FROM input_table
Tôi có thể tìm thấy bên dưới khách hàng tiềm năng trên Stack Overflow, giải thích để dịch chuyển cột sang trái nếu tất cả các cột đều rỗng. Nhưng nó thay thế tất cả các NULL (ngay cả khi NULL là đến sau khi bất kỳ giá trị khác không/không null).
move cells left in sql if left contains null and right contains value
Tôi đang lên kế hoạch để xây dựng một giải pháp năng động có thể xử lý các cột mới khi dữ liệu tháng so với tháng trước được thêm vào.
Cơ sở dữ liệu là: MS SQL Server 2012.
SQLs Nhanh Để Chuẩn bị dữ liệu: -
CREATE TABLE input_table(
cust_id char(5),
month1 int,
month2 int,
month3 int,
month4 int,
month5 int
);
INSERT INTO input_table VALUES
('c1',100,200,300,400,500),
('c2',0,0,50,250,350),
('c3',0,0,100,0,0),
('c4',100,0,100,0,500),
('c5',0,0,0,0,0);
Bạn đã chuẩn hóa dữ liệu của mình dưới dạng bước sơ bộ cụ thể cho hoạt động này chưa? Nếu dữ liệu của bạn ở dạng cột cho cust_id, month_number và giá trị, chúng sẽ dễ dàng hơn để làm việc. Nếu dữ liệu cơ sở ở dạng không chuẩn hóa mà bạn hiển thị, bạn có thể bình thường hóa chúng chỉ cho thao tác này. –
bạn sẽ làm gì với dữ liệu sau khi bạn nhận được dữ liệu ở định dạng này? và bạn có thể vui lòng định dạng các bảng đó bằng cách sử dụng https://ozh.github.io/ascii-tables/ – scsimon
@scsimon Được định dạng i/p và các bảng o/p được mong đợi ở định dạng có thể đọc được không. Điều này là bắt buộc đối với ML Algo. – XEngineer