0

次のような2つのテーブルがあります。

LOAN_APP_QST (profile on lending) and
QST_PART (it set up all the fields of loan application).

クエリ:

SELECT LOAN_APP_QST.REQ_ID,
       LOAN_APP_QST.QST_PART_ID,
       LOAN_APP_QST.LAQ_VALUE,
       QST_PART.QP_NUM,
       QST_PART.QP_NAME
  FROM    SP_MTS.LOAN_APP_QST LOAN_APP_QST
       INNER JOIN
          SP_MTS.QST_PART QST_PART
       ON (LOAN_APP_QST.QST_PART_ID = QST_PART.QST_PART_ID)
       WHERE LOAN_APP_QST.REQ_ID = 23000; 

クエリ結果:

REQ_ID     QST_PART_ID     LAQ_VALUE     QP_NUM      QP_NAME
23000          -1           IVANOV       surname    FirstName
23000          -2           IVAN          name      LastName
23000          -3           V.            pname     Patronymic

次のような出力が必要です。

REQ_ID      surname     name    pname
23000       IVANOV       IVAN   V.

Oracle DB 11を使用しています。どのように実装できますか?

4

1 に答える 1

1

PIVOTOracle 11gでは、次の関数を使用できます。

select *
from
(
  SELECT LOAN_APP_QST.REQ_ID,
   LOAN_APP_QST.LAQ_VALUE,
   QST_PART.QP_NUM
  FROM SP_MTS.LOAN_APP_QST LOAN_APP_QST
  INNER JOIN SP_MTS.QST_PART QST_PART
    ON (LOAN_APP_QST.QST_PART_ID = QST_PART.QST_PART_ID)
  WHERE LOAN_APP_QST.REQ_ID = 23000
) src
pivot
(
  max(LAQ_VALUE)
  for QP_NUM in (surname, name, pname)
) piv;

CASEこれは、次の式を使用した集計関数を使用して記述することもできます。

SELECT LOAN_APP_QST.REQ_ID,
  max(case when QST_PART.QP_NUM = 'surname' then LOAN_APP_QST.LAQ_VALUE end) as surname,
  max(case when QST_PART.QP_NUM = 'name' then LOAN_APP_QST.LAQ_VALUE end) as name,
  max(case when QST_PART.QP_NUM = 'pname' then LOAN_APP_QST.LAQ_VALUE end) as pname
FROM    SP_MTS.LOAN_APP_QST LOAN_APP_QST
INNER JOIN SP_MTS.QST_PART QST_PART
  ON (LOAN_APP_QST.QST_PART_ID = QST_PART.QST_PART_ID)
WHERE LOAN_APP_QST.REQ_ID = 23000
group by LOAN_APP_QST.REQ_ID; 
于 2013-03-05T12:56:46.587 に答える