Jak połączyć dwa zapytania (wszystkie zjednoczone) w jednym wierszu?
Mam trudną sytuację w próbie uzyskania informacji z wielu zapytań do jednego wiersza.
Rozważ poniższą tabelę:
CpuUage:
Time time
Group char(10)
Subsys char(4)
Jobs int
Cpu int
posiadanie następujących danych:
Time Group Subsys Jobs Cpu
----- ------ ------ ---- ---
00:00 group1 NORM 1 101 (grp1-norm) A1
01:00 group1 SYS7 3 102 (grp1-sys7) A2
01:00 group1 NORM 5 104 (grp1-norm) A1
02:00 group1 NORM 7 108 (grp1-norm) A1
02:00 group2 NORM 9 116 (grp2-norm) B1
02:00 group3 SYS7 11 132 (grp3-sys7) C2
03:00 group1 SYS7 13 164 (grp1-sys7) A2
03:00 group1 IGNR 99 228 (grp1-ignr) --
Znaczniki po prawej stronie (np.A1
) to sekcje w raporcie poniżej, które mają wpływać na każdy wiersz.
Potrzebuję zapytania, które może zwrócić pojedynczy wiersz dla każdej grupy użytkowników, ale z jednym zastrzeżeniem. Wartości dlaJobs
iCpu
muszę przejść do różnych kolumn w zależności od identyfikatora podsystemu i interesuje mnie tylkoSYS7
iNORM
identyfikatory podsystemów.
Na przykład potrzebujemy następujących elementów (A/B/1/2
bity to odsyłacz do wierszy powyżej):
<------ 1 ------> <------ 2 ------>
Group NormJobs NormCpu Sys7Jobs Sys7Cpu
------ -------- ------- -------- -------
A: group1 13 313 16 266
B: group2 9 116 0 0
C: group3 0 0 11 164
Nasze stare rozwiązanie do raportowania mogło uruchamiać wiele zapytań (za pomocąunion all
), a następnie przetwórz wiersze, aby połączyć te z tą samą nazwą grupy, aby:
Group NormJobs NormCpu Sys7Jobs Sys7Cpu
------ -------- ------- -------- -------
group1 13 313 0 0
group1 0 0 16 266
zostały połączone razem, zgodnie z:
select groupname, sum(jobs), sum(cpu), 0, 0 from tbl
where subsys = 'NORM'
group by groupname
union all
select groupname, 0, 0, sum(jobs), sum(cpu) from tbl
where subsys = 'SYS7'
group by groupname
Niestety, nasze nowe rozwiązanie nie pozwala na przetwarzanie końcowe i wszystko musi być wykonane w zapytaniu SQL.
Pamiętając, że mogą istnieć grupySYS7
wydziwianie,NORM
wiersze, oba lub żaden, jaki jest najlepszy sposób, aby to osiągnąć?
Pomyślałem o pod-zapytaniu tabeli z zewnętrznego wyboru, ale może to mieć konsekwencje dla wydajności.
Ponadto byłby to ból, ponieważ musiałbym sprawić, aby zewnętrzne zapytanie zawierało podsystemy NORM i SYS7, a następnie uruchomiono podzapytanie dlakażdy pole (nie mogę wykonać zewnętrznego zapytania tylko dlaNORM
miejsc pracy od obecności grupy tylkoSYS7
rzędy nie zostaną złapane w ten sposób).
Czy możesz wytworzyć jakąkolwiek z twoich magii lewostronnie środkowej wewnętrznej offside, aby znaleźć realne rozwiązanie?
Wolałbym rozwiązanie agnostyczne od dostawcy, ale jeśli musisz przejść do specyficznego dostawcy, platformą jest DB2. Mimo to inne platformy mogą przynajmniej dać mi wyobrażenie o tym, co wypróbować, więc cieszę się, że je widzę.