저는 Oracle 11g 데이터베이스로 작업하고 있습니다. 여러 표를 함께 결합해야하며 그 중 하나의 표에는 각 결과가 한 행인 여러 테스트의 결과 값이 들어 있습니다. 테이블을 결합 할 때 여러 테스트 결과를 하나의 행으로 집계합니다.테이블을 조인하고 행을 열로 바꾸십시오.
다음은 내가 가진 것의 축소 된 예입니다. 요청, 테스트 및 특정 테스트에 대한 결과라는 세 테이블의 데이터를 쿼리하고 있습니다.
SELECT
requisitions.acc_id
,tests.test_name
,results.result_numeric
FROM requisitions
inner join req_panels ON requisitions.acc_id = req_panels.acc_id
inner join results ON req_panels.rp_id = results.rp_id
inner join tests ON results.test_id = tests.test_id
WHERE results.test_id IN (1,2,7,8)
ORDER BY requisitions.acc_id
결과는 다음과 같습니다.
Acc_ID | Test_Name | Result_Numeric
------------------------------------
000001 | Test 1 | 24
000001 | Test 2 | 1.5
000002 | Test 1 | 15
000002 | Test 2 | 2.1
하지만 내가 얻고 싶은 것은;
Acc_ID | Test 1 | Test 2
--------------------------
000001 | 24 | 1.5
000002 | 15 | 2.1
바라기를. 피벗이나 다른 것을 사용해야합니까? 나는 아직도 비교적 새로운 피봇 팅 (pivoting)에 익숙하며 아직 사용 방법을 이해하지 못했습니다.
감사합니다.
편집 : 이것은 피벗을 사용하여 만들었습니다. 피봇을 처음 사용하려고 시도했기 때문에 내가 잘못한 일이나 더 효율적으로 수행 할 수있는 일만하면 알려주는 것입니다.
SELECT * FROM (
SELECT requisitions.acc_id
,tests.TEST_ID
,results.RESULT_NUMERIC
FROM requisitions
inner join req_panels ON requisitions.acc_id = req_panels.acc_id
inner join results ON req_panels.rp_id = results.rp_id
inner join tests ON results.test_id = tests.test_id
WHERE results.TEST_ID IN (1,2,3)
)
pivot(
MAX(RESULT_NUMERIC)
for TEST_ID IN ('1' AS Test 1,'2' AS Test 2,'3' AS Test 3)
)
ORDER BY ACC_ID
감사합니다,이 많은 도움이되었습니다. 나는 실제로 당신이 대답하기 전에 마지막으로 일한 분과 가까운 뭔가를 생각해 내었습니다. 실제 차이점은 피벗에서 test_name 대신 test_id를 사용한다는 것입니다. 나는 조정해야 할 지 모르지만 나는 여전히 다른 몇 가지 엣지 경우를 연구 중이다. – JayG30