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ę.

questionAnswers(3)

yourAnswerToTheQuestion