여러 쿼리의 정보를 단일 행에 넣으려고 할 때 까다로운 상황이 있습니다. 다음과 같은 데이터 유지두 개의 쿼리 (모두 합집합)를 하나의 행에 결합하려면 어떻게합니까?
CpuUage:
Time time
Group char(10)
Subsys char(4)
Jobs int
Cpu int
:
다음 표를 고려해 각 행이 예상된다 아래 오른쪽에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) --
마커를 (A1
는 예를 들어) 보고서의 섹션은 관련되는.
각 사용자 그룹에 대해 단 하나의 단을 반환 할 수있는 쿼리가 필요합니다. Jobs
및 Cpu
의 값은 하위 시스템 ID에 따라 다른 열로 이동해야하며 하위 시스템 ID 인 SYS7
및 NORM
에만 관심이 있습니다. ,
<------ 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
우리의 오래된보고 솔루션의 (a union all
와) 여러 쿼리를 실행할 수 있습니다 :
그래서, 예를 들어, 우리는합니다 (A/B/1/2
비트가 다시 위의 행에 상호 참조 수 있습니다) 다음이 필요합니다
Group NormJobs NormCpu Sys7Jobs Sys7Cpu
------ -------- ------- -------- -------
group1 13 313 0 0
group1 0 0 16 266
함께 합병의 라인을 따라, :
있도록 다음 사후 처리는 행은 동일한 그룹 이름을 가진 사람을 결합하는우리의 새로운 솔루션은 후 처리를 허용하지 않으며 모두 SQL 쿼리에서 수행되어야합니다.
SYS7
개의 행 (NORM
행)을 가진 그룹이있을 수도 있고 둘 다 같지 않을 수도 있음을 명심하십시오.이를 달성하는 가장 좋은 방법은 무엇입니까?
외부 선택 내에서 테이블을 하위 쿼리로 생각했지만 성능에 영향을 줄 수 있습니다. 내가 외부 쿼리 난 그냥에 대한 NORM
작업 이후 외부 쿼리를 할 수 없습니다 (NORM 및 SYS7 서브 시스템은 다음 모든 필드의 하위 쿼리를 실행 포함 할 거라고 이후
은 또한, 그 고통이 될 것입니다 단지 SYS7
행을 가진 그룹의 존재는 그렇게 잡히지 않을 것입니다.
실용적인 솔루션을 찾기 위해 왼쪽 중간 - 내측 - 오프사이드 조인 마법을 짜 넣을 수 있습니까?
벤더에 의존하지 않는 솔루션을 선호하지만, 벤더에 따라야하는 경우 플랫폼은 DB2입니다. 아직도, 다른 플랫폼은 적어도 나에게 무엇을 시도해야하는지에 대한 아이디어를 줄 수있어서 그들을 볼 수있어서 기쁩니다.그냥 빨리해야처럼
것은, 내가보고 싶네 결과. 본능적으로, 나는 어떤 방법 으로든 또는 다른 어떤 방법으로 CASE 문장의 작업을 수행 할 것으로 기대한다. 나는. "groupname = g 및 subsys = s 인 경우 집계 (g, s)에 추가". 데이터 검색 측면에서 차이가 더 많을 것으로 기대합니다. 그러나 DBMS가 인덱스 정보를 활용하여 특정 그룹을 집계 할 때 필요한 비교 횟수를 줄일 수있는 가능성에 대해 공개적으로 말합니다. 물리적 정렬 순서 (클러스터 된 인덱스)가 (substys, groupname) 인 테스트 순열에 포함하는 것이 좋습니다. –