Jestem zobowiązany do używania PostgresSql. Mam podane w poniższej tabeli nazywa pieniądze jako wejściePokaż wszystkie kolumny zmieniające się między dwoma wierszami
Cash | Adhoc | Collateral | Total
---------------------------------
20 | 30 | 40 | 90
32 | 12 | 40 | 84
10 | 12 | 40 | 62
13 | 20 | 50 | 83
Jak sama nazwa wskazuje, jest całkowita suma gotówki, adhoc i zabezpieczeń wartości tego wiersza.
I wymagają follwing tabeli wyjściowej
ChangeType | ChangeAmount
---------------------------
Cash | 12
Adhoc | -18
Cash | -22
Cash | 3
Adhoc | 8
Collateral | 10
Jest to etap 1. W następnym etapie, nowa kolumna o nazwie ClientID ma zostać dodany, a zmiany te mają być pokazane dla każdego konkretnego klienta. Powiedz, że klient1 jest wierszem 1, klient 2 to wiersz 2 i 3, a następnie klient1 znów jest wierszem 4. Następnie tabela porównawcza dla klienta1 zostanie utworzona przy użyciu wiersza1 i wiersza4.
tabela wyjściowa będzie
ChangeType | ChangeAmount | ClientId
------------------------------------------
Cash | 7 | client1
Adhoc | -10 | client1
Collateral | 10 | client1
Cash | -22 | client2
udało mi się osiągnąć to, co jest chaging gdy „tylko jedna kolumna” zmienia się między rzędami za pomocą
SELECT
CASE WHEN ((Cash - lag(Cash, 1)
OVER (PARTITION BY clientId
)) != 0)
THEN CAST('Cash' AS Text)
WHEN ((Adhoc - lag(Adhoc, 1)
OVER (PARTITION BY clientId
)) != 0)
THEN CAST('Adhoc' AS Text)
WHEN ((Collateral - lag(Collateral, 1)
OVER (PARTITION BY clientId
)) != 0)
THEN CAST('Collateral' AS Text)
END,
Total - lag(Total,1)
OVER (PARTITION BY clientId)
FROM money
Ja jednak stracił jak aby pokazać zmianę dla wielu kolumn zmieniających się w jednym rzędzie.
Jest to szczególny przypadek unpivoting. Najprawdopodobniej musisz wygenerować rekordy zmian dla każdej kolumny każdego wiersza, a następnie odfiltrować te, w których zmiana wynosi zero. –
Dzięki. Czy niepodzielenie jest wykonywane na poziomie zapytania, czy też muszę napisać kod soci C++? –
Byłbym bardzo zaskoczony, gdyby nie było to praktyczne na poziomie SQL. Podaj użyteczne, kompletne dane przykładowe jako instrukcje "CREATE TABLE" i "INSERT" (najlepiej jako http://sqlfiddle.com) i przyjrzę się, ale nie mam ochoty wymyślać osobliwych danych. –