[#1] SQL - jak to przestawić?
Słuchajcie, mam albo jakieś zaćmienie, albo to wcale nie jest takie proste.

Jest sobie tabela, która składa się z trzech kolumn: ID, ORDER oraz DANE. W ID mamy kolejny rekord w tabeli, przy czym rekord może skład się z podrekordów uporządkowanych według ORDER. W kolumnie DANE mamy wartości dla danego podrekordu. Ważne jest to, że układ jest zawsze taki sam - wartości dodatnie są wyżej, a wartości ujemne niżej (niekoniecznie w porządku malejącym).

Przykładowa tabela dla jednego wpisu:
ID ORDER DANE
1 1  300
1 2  -200


Oczywiście inny wpis może wyglądać tak:
ID ORDER DANE
2 1  200
2 2  300
2 3 -400
2 4 -500


Ale może być też taka sytuacja:
ID ORDER DANE
3 1  300
3 2  200
3 3  -400


Widzicie już chyba zależność, że zawsze będzie przynajmniej jedna liczba ujemna i jedna dodatnia przy czym dodatnie zawsze będą wyżej, a ujemne niżej.

Pytanie:

Chciałbym tabelę przestawić w taki sposób, że będę mieć trzy kolumny: ID, suma(WARTOŚCI UJEMNE), suma(WARTOŚCI DODATNIE).

Czyli dla ID = 1 uzyskam coś takiego:
ID UJEMNE DODATNIE
1 -200 300


Czyli dla ID = 2 uzyskam coś takiego:
ID UJEMNE DODATNIE
2 -900 500


Kombinuję z PIVOT, ale to coś nie robi tego jak chcę, albo ja źle robię.
[#2] Re: SQL - jak to przestawić?

@mailman, post #1

Proszę, oto rozwiązanie:

SELECT wynik1.id, dodatnie, ujemne 
FROM (SELECT id, sum(a.dane) as dodatnie FROM tabela AS a 
WHERE a.dane > 0 
GROUP BY a.id) AS wynik1 
NATURAL JOIN (SELECT id, sum(dane) as ujemne FROM tabela AS b 
WHERE b.dane < 0 
GROUP BY b.id) AS wynik2;

Korzystam z utworzenia dwóch tabel w jednym poleceniu - jednej zliczającej dodatnie, drugiej ujemne i połączenia ich za pomocą JOIN, a następnie podaniu ich jako tabeli w klauzuli FROM przez SELECT.

Chcę jeszcze zauważyć, że kolumna o nazwie "ORDER" jest niedozwolona, bo to słowo kluczowe SQL.

Ostatnia aktualizacja: 01.08.2020 07:51:46 przez Hexmage960
[#3] Re: SQL - jak to przestawić?

@Hexmage960, post #2

Dzięki. Już rano sobie w podobny sposób poradziłem.

Dziadostwo PIVOT w SQL bez zaprzęgania PL/SQL trochę mi wczoraj umysł przyćmiło.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem