Potrzebuję przesunąć dane (kolumny) na lewą stronę, jeśli pierwsze kolumny (lewa strona kolumny) mają wartość 0, a NULL należy dodać w kolumnach po prawej stronie. Po znalezieniu niezerowej wartości w kolumnach, wartość 0 w późniejszej kolumnie powinna pozostać taka, jaka jest. DaneMS SQL 2012: W kolumnie SQL Shift po lewej stronie, jeśli kolumna zawiera 0
wejściowe: -
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
Oczekiwany wynik wyjściowy: -
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
Jeden obejście statyczne mogą być:
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
Mogę znaleźć poniżej odprowadzenia w przepełnieniu stosu, które wyjaśnia przesunięcie kolumn w lewo, jeśli wszystkie kolumny mają wartość zerową. Ale zastępuje wszystkie NULL (nawet jeśli NULL przychodzi po każdej niezerowej/nie zerowej wartości).
move cells left in sql if left contains null and right contains value
Mam zamiar zbudować dynamiczne rozwiązanie, które mogą obsługiwać nowe kolumny gdy dane miesiąc do miesiąca zostanie dodana.
Baza danych jest MS SQL Server 2012.
Szybkie zapytania SQL, aby przygotować dane: -
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);
Czy zdenormalizowałeś swoje dane jako wstępny krok specjalnie dla tej operacji? Jeśli Twoje dane mają postać kolumn dla cust_id, month_number i value, będą łatwiejsze w użyciu. Jeśli dane podstawowe znajdują się w zdormowanej formie, którą pokazujesz, możesz normalizować je tylko dla tej operacji. –
co zamierzasz zrobić z danymi po tym, jak dostaniesz je w tym formacie? i czy możesz je sformatować za pomocą https://ozh.github.io/ascii-tables/ – scsimon
@scsimon Utworzono tabele o/p i oczekiwane o/p w czytelnym formacie. Jest to wymagane w przypadku ML Algo. – XEngineer