2011-12-16 5 views
2

Могу ли я создать несколько столбцов для нескольких строк, используя ключевое слово PIVOT в Oracle, используя один запрос вместо двух запросов, как показано ниже. Например ..Pivot Key word в Oracle

1)

SELECT 
    * 
FROM 
(
SELECT elig.person_id,elig.cmpo_key, recm.pyin_amt FROM sp_cmpo_elig elig, sp_base_pay_recm recm 
    WHERE elig.cmpo_elig_key=recm.cmpo_elig_key AND elig.person_id='807114') temp 
pivot (Max(temp.pyin_amt) FOR (cmpo_key) IN (1 AS pyin_amt_1, 2 AS pyin_amt_2, 3 AS pyin_amt_3, 4 AS pyin_amt_4)) 

Если я использую этот запрос, я получаю выход, как показано ниже ..

PERSON_ID PYIN_AMT_1 PYIN_AMT_2 PYIN_AMT_3 PYIN_AMT_4 
807114  1524.23  235.25 235.25  235.25 

2)

SELECT 
    * 
FROM 
(
SELECT elig.person_id,elig.cmpo_key, recm.pyin_pct FROM sp_cmpo_elig elig, sp_base_pay_recm recm 
    WHERE elig.cmpo_elig_key=recm.cmpo_elig_key AND elig.person_id='807114') temp 
pivot (Max(temp.pyin_pct) FOR (cmpo_key) IN (1 AS pyin_pct_1, 2 AS pyin_pct_2, 3 AS pyin_pct_3, 4 AS pyin_pct_4)) 

Выходной :

PERSON_ID PYIN_PCT_1 PYIN_PCT_2 PYIN_PCT_3 PYIN_PCT_4 
807114  2    5   5   3 

Могу ли я создать отдельный запрос вместо двух запросов, как указано выше. Просьба предоставить решения для этого.

Примечание: Я попытался с союзом и, если я использую союз это даст две записи, как показано ниже ...

PERSON_ID PYIN_AMT_1 PYIN_AMT_2 PYIN_AMT_3 PYIN_AMT_4 
807114  1524.23  235.25 235.25  235.25 
807114  2    5  5    3 

мой ожидаемый результат не так, как выше, я ожидал, как показано ниже ....

PERSON_ID PYIN_AMT_1 PYIN_AMT_2 PYIN_AMT_3 PYIN_AMT_4 PYIN_PCT_1 PYIN_PCT_2 PYIN_PCT_3 PYIN_PCT_4 
807114  1524.23  235.25 235.25  235.25  2    5  5    3 

ответ

0
SELECT 
    * 
FROM 
(
SELECT elig.person_id,elig.cmpo_key, recm.pyin_amt FROM sp_cmpo_elig elig, sp_base_pay_recm recm 
    WHERE elig.cmpo_elig_key=recm.cmpo_elig_key AND elig.person_id='807114') temp 
pivot (Max(temp.pyin_amt) FOR (cmpo_key) IN (1 AS pyin_amt_1, 2 AS pyin_amt_2, 3 AS pyin_amt_3, 4 AS pyin_amt_4)) 
UNION 
SELECT 
    * 
FROM 
(
SELECT elig.person_id,elig.cmpo_key, recm.pyin_pct FROM sp_cmpo_elig elig, sp_base_pay_recm recm 
    WHERE elig.cmpo_elig_key=recm.cmpo_elig_key AND elig.person_id='807114') temp 
pivot (Max(temp.pyin_pct) FOR (cmpo_key) IN (1 AS pyin_pct_1, 2 AS pyin_pct_2, 3 AS pyin_pct_3, 4 AS pyin_pct_4)) 
+0

Привет, я пытался как то, что дали, но Она возвращает две записи. Но мне нужна одна запись для этого сотрудника с 8 столбцами, как показано ниже. –

+0

Привет, Это даст две записи не одну запись для этого человека. –