sumowanie wystąpienia wartości dodatnich oraz ujemnych

Odpowiedz Nowy wątek
2011-08-01 16:51
0

mam tabelę w której mam dane:

trader_id order_nbr symbol gross_pl net_pl event_date time
XXXXYYYY 1628975482 ZTR 0.0000 -0.0200 2010-06-01 15:06:24.199
XXXXYYYY 1628975482 ZTR 0.0000 -0.0100 2010-06-01 15:06:08.302
XXXXYYYY 1628975480 RAD 0.0000 0.0300 2010-06-01 15:05:41.44
XXXXYYYY 1628975479 DHF 0.0000 0.0400 2010-06-01 15:04:01.237
XXXXYYYY 1628975479 DHF 0.0000 0.0125 2010-06-01 15:02:42.613
XXXXYYYY 1628975479 DHF 0.0000 0.0125 2010-06-01 15:00:58.52

chcę uzyskać takie zapytanie, aby dla distinct(order_nbr) sprawdzało czy net_pl >= 0, oraz net_pl < 0, i sumowało wystąpienie tych wartości (nie sum(net_pl)), czyli uzyskać taki wynik:

trader_id net_pl_plus net_pl_minus
XXXXYYYY 2 1

Pozostało 580 znaków

2011-08-01 21:03
0

nie bardzo wiem co chcesz uzyskać bo ciężko mi powiązać wynik, którego oczekujesz z danymi i warunkiem, który opisałeś


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-08-01 22:59
0

Użyj CASE WHEN... w SELECT.

Pozostało 580 znaków

2011-08-02 09:26
0

Nie distinct, tylko group by, a w sumach jak napisał AdamPL uzywasz case. W pierwszej sum sumujesz tylko większe od, równe zero, w drugiej ujemne.
Ot 10 sekund klepania w klawisze, bo ja wolno piszę :)

Pozostało 580 znaków

2011-08-02 10:18
0

Obawiam się, że nie: http://www.goldenline.pl/foru[...]tosci-dodatnich-oraz-ujemnych

Pozostało 580 znaków

2011-08-02 13:04
0

No to chłopak poszalał. Ale to kolejny przykład pokazujący że ludzie nie potrafią sformułować istoty problemu i to podobno wykształceni, grrrrr
Się nie dziwię, że później powstają takie rysuneczki jak ten z huśtawką z opony obrazujący co chciał klient, a co zrozumiał programista.

Pozostało 580 znaków

2011-08-02 15:29
0

massther masz rację, nie wiedziałem jak sformułować w czym jest problem, ponieważ cały czas miałem w głowie, że bez DISTINCT się nie obejdzie, nie wpadłem aby użyć podzapytania (tak to jest jak się rzadko używa sql),
rozwiązanie przedstawiono na innym forum:

SELECT trader_id, SUM(CASE WHEN net_pl >= 0 THEN 1.0 ELSE 0.0 END),
SUM(CASE WHEN net_pl < 0 THEN 1.0 ELSE 0.0 END)
FROM
  (SELECT 
    trader_id,
    order_nbr,
    SUM(net_pl) net_pl
  FROM t
  GROUP BY trader_id, order_nbr
  ) t
GROUP BY trader_id;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0