Jak wykonac zapytanie by w jednym wyniku miec zlaczenie wierszy?

Jak wykonac zapytanie by w jednym wyniku miec zlaczenie wierszy?
masterO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1025
0
Id date type wielkosc
1 2012-10-07 A 123
2 2012-10-07 B 322
3 2012-10-07 C 122
4 2012-10-08 A 433
5 2012-10-08 B 532
6 2012-10-08 C 555

Mam pytanie czy da sie teraz wyciagnac tak by w jednym wierszu zwrotnym bylo tak:

DATA WIELKOSC A WIELKOSC B WIELKOSC C
2012-10-07 123 322 122
2012-10-08 433 532 555

Da się takie cos w ogole osiagnac ?

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

crosstab trzeba doinstalować na postgresie.
Jeśli ci się nie udam to w pon mogę dac funkcję która -= to samo robi.

masterO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1025
0

Nie mam zainstalowanego crosstaba a da sie to jakos inaczej zrobic?

masterO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1025
0

Zrobiłem takie małe zapytanie

Kopiuj
 SELECT t.date,t1.wielkosc AS wielkosc_A, t2.wielkosc AS wielkosc_B
FROM tabela t
LEFT JOIN (SELECT date,wielkosc FROM tabela WHERE type = 'A') t1 ON t.date = t1.date
LEFT JOIN (SELECT date,wielkosc FROM tabela WHERE type = 'B') t2 ON t.date = t2.date
GROUP BY t_date,t1.wielkosc,t2.wielkosc;

ale zwraca dwa razy więcej wyników :/
Nie mam już pomysła

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0
masterO napisał(a)

Zrobiłem takie małe zapytanie

Kopiuj
 SELECT t.date,t1.wielkosc AS wielkosc_A, t2.wielkosc AS wielkosc_B
FROM tabela t
LEFT JOIN (SELECT date,wielkosc FROM tabela WHERE type = 'A') t1 ON t.date = t1.date
LEFT JOIN (SELECT date,wielkosc FROM tabela WHERE type = 'B') t2 ON t.date = t2.date
GROUP BY t_date,t1.wielkosc,t2.wielkosc;

ale zwraca dwa razy więcej wyników :/
Nie mam już pomysła

Nie jestem do końca pewien czy tak wypali, bym musiał przetestować, ale spróbuj tak:

Kopiuj
SELECT t.date,t.wielkosc AS wielkosc_A, t1.wielkosc AS wielkosc_B, t2.wielkosc AS wielkosc_C
FROM tabela t
LEFT JOIN tabela t1 ON t.date = t1.date AND t1.type = 'B'
LEFT JOIN tabela t2 ON t.date = t2.date AND t2.type = 'C'
WHERE
      t.type = 'A'
KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 36
0

Może tak prościej będzie:

Kopiuj
select date,
  sum(case when type='A' then wielkosz end ) wielkosc_a,
  sum(case when type='B' then wielkosz end ) wielkosc_b,
  sum(case when type='C' then wielkosz end ) wielkosc_c
from test.test1
group by date 

date                 wielkosc_a                   wielkosc_b                   wielkosc_c                        
-------------------- ---------------------------- ---------------------------- ------------------- 
2012-10-07           123                          322                          122                               
2012-10-08           433                          532                          555  

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.