Ключевое слово Pivot в Oracle - PullRequest
2 голосов
/ 16 декабря 2011

Можно ли создать несколько столбцов для нескольких строк, используя ключевое слово PIVOT в 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

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

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

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

Ответы [ 2 ]

0 голосов
/ 18 апреля 2018

вы можете указать несколько агрегатов в своем сводном предложении

try

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) AMT ,Max(temp.pyin_pct) PCT FOR (cmpo_key) IN (1 AS pyin_1, 2 AS pyin_2, 3 AS pyin_3, 4 AS pyin_4 ))

Вы можете видеть, что я добавил оба предложения MAX и дал им псевдонимы.Я также переименовываю псевдонимы в предложении IN, чтобы удалить совокупное имя столбца

. Если вы используете это, вы должны получить столбцы с именами pyin_1_amt и pyin_1_pct и т.д ...

см. Также Запрос Oracle Pivot дает столбцы с кавычками вокруг имен столбцов.Что? , который имеет полный работоспособный ответ с тестовыми данными.

0 голосов
/ 16 декабря 2011
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 ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...