Twoje drugie zapytanie jest o wiele przyjemniejsze do napisania, ponieważ:
select bzq_terminate_provider as PROVIDER, sum(callsnum) as CALLS,
sum(charge_amount) as CHARGE, sum(at_call_dur_sec) as DUR
from usage_cycle_sum
where ban = '80072922' and ben = '1' and
subscriber_no = '036585305' and
start_cycle_code ='20150207' and
feature_code_rank in ('1', '2')
group by bzq_terminate_provider ;
A może select
musi być:
select bzq_terminate_provider as PROVIDER,
sum(case when feature = '1' then callsnum else 0 end) as CALLS,
sum(charge_amount) as CHARGE,
sum(case when feature = '1' then at_call_dur_sec else 0 end) as DUR
(Pierwsza wersja zakładała, że pola zostały wyzerowane w drugim podzapytaniu, ponieważ są one NULL
w danych, ale to może nie być prawda).
Jednak oprogramowanie użytkowe nie jest jeszcze wystarczająco inteligentne, aby identyfikować takie niezręcznie napisane zapytania, więc nie jest to rzeczywisty problem, z którym się borykasz. Jeśli zapytanie działa w bazie danych, ale nie w aplikacji, typowe problemy to:
- Aplikacja nie jest połączona z właściwą bazą danych.
- Aplikacja nie ma uprawnień do bazy danych lub tabeli.
- Zapytanie aplikacji różni się od zapytania uruchomionego w bazie danych, zwykle z powodu problemu z podstawieniem.
- Wyniki uruchomienia zapytania w aplikacji nie są poprawnie interpretowane.