1

Temat: Pomoc w napisaniu zaytania

Mam tabele:

termin     | kwota | klient
-----------------------------
2012-03-31 | 0.00    |  1
2012-06-31 | 0.00    |  1
2012-09-31 | 0.00    |  1
2012-12-31 | 0.00    |  1

2012-03-31 | 0.00    |  2
2012-06-31 | 0.00    |  2
2012-09-31 | 1.00    |  2
2012-12-31 | 3.00    |  2

Chciałbym otrzymać wynik:

termin     | kwota | klient
-----------------------------
null       | 0.00    |  1

2012-09-31 | 4.00    |  2

Czyli dla tych klientów którzy nie mają kwoty po prostu wpisać im sumę= 0 i datę = null,
a dla tych którzy mają jakąś kwotę wpisać sumę = suma pojedynczych kwot, a za datę wpisać datę pierwszej kwoty.

Na razie mam taki pomysł:

select termin sum(kwota) as kwota, klient
from tabela
group by klient

tylko że wtedy będę miał:

termin     | kwota | klient
-----------------------------
2012-01-31 | 0.00    |  1

2012-01-31 | 4.00    |  2

a jak dam:

select termin sum(kwota) as kwota, klient
from tabela
where kwota != 0 
group by klient

to będę miał:

termin     | kwota | klient
-----------------------------
2012-09-31 | 4.00    |  2

Czy jest jakiś sprytny pomysł aby to zrobić, czy trzeba zrobić dwie tabele: - jedną gdzie suma = 0, drugą gdzie suma != 0 i je później "union" ?


P.S.
Co to za spam się tu dostał na forum :-( ?

2

Odp: Pomoc w napisaniu zaytania

Tzn. może jest jakieś inne sprytniejsze rozwiązanie niż takie:

with h1 as ( select sum(kwota) as kwota, date(null) as termin, klient
             from tabelka
             group by klient
             having sum(kwota_raty)=0),
     h2 as (select sum(kwota) as kwota, min(termin) as termin, klient
            from tabelka
            where kwota != 0
            group by klient
            having sum(kwota)!=0),
     tab as (select * from h1
             union
             select * from h2)
select * from tab;

3

Odp: Pomoc w napisaniu zaytania

proszę

with tabela as (
select '2012-03-31' as termin,0.00 as kwota,1 as klient union all
select '2012-06-31',0.00,1 union all
select '2012-09-31',0.00,1 union all
select '2012-12-31',0.00,1 union all
select '2012-03-31',0.00,2 union all
select '2012-06-31',0.00,2 union all
select '2012-09-31',1.00,2 union all
select '2012-12-31',3.00,2 )
select
min(case when kwota=0.0 then null else termin end) as termin
,klient
,sum(kwota) as kwota
from tabela
group by klient

4

Odp: Pomoc w napisaniu zaytania

Działa :-)