0

私は現在oracle 11gを使用していますが、私が直面している問題です。私は以下のようにSQL文を表示しています:

 SELECT A.LM_PERSON_ID
 ,A.LM_GRADE
 ,C.COURSE_STR
 ,Decode (A.LM_GRADE,'001','1','002','2','003','3') AS JOB_GRADE


 FROM PS_LM_PERSON_JOB A
,PS_LM_LPLN_LRN B 
,PS_LM_LPLN_DTL C 
,PS_LM_ENRLMT D
,PS_LM_CI_TBL E 


WHERE A.LM_EMPL_RCD='0'
AND A.LM_EFFSEQ=(SELECT Max(A1.LM_EFFSEQ) FROM PS_LM_PERSON_JOB A1 
WHERE A.LM_PERSON_ID=A1.LM_PERSON_ID AND A.EFFDT=A1.EFFDT 
AND A.LM_EMPL_RCD=A1.LM_EMPL_RCD)
AND A.LM_ACTIVE='Y'
AND A.EFFDT=(SELECT Max(A2.EFFDT) FROM PS_LM_PERSON_JOB A2 
WHERE A.LM_PERSON_ID=A2.LM_PERSON_ID AND A.LM_EMPL_RCD=A2.LM_EMPL_RCD 
AND A.LM_EFFSEQ=A2.LM_EFFSEQ) 
AND A.LM_PERSON_ID=B.LM_PERSON_ID (+)  
AND B.LM_LPLN_ID=C.LM_LPLN_ID (+) 
AND B.LM_PERSON_ID=C.LM_PERSON_ID (+)
AND C.LM_ENRLMT_ID=D.LM_ENRLMT_ID (+)  
AND D.LM_CI_ID=E.LM_CI_ID (+)
AND E.EFFDT=(SELECT Max(E1.EFFDT) FROM PS_LM_CI_TBL E1 WHERE E.LM_CI_ID=E1.LM_CI_ID)


ORDER BY A.LM_PERSON_ID

私がしたい出力は次のとおりです。

  JOB GRADE   COURSE_STR.A    COURSE_STR.B    COURSE_STR.C 
    1              5               3               1
    2              4               2               2
    3              1               1               1

誰かがあなたがそれをどのように行うことができるかを共有できますか? どうもありがとうございました。

4

1 に答える 1

1

PIVOT演算子を見て、問題が解決するかどうかを確認してください。

より多くの情報を提供していただければ、クエリを作成することができます。おそらく、変換なしのクエリ結果の簡単な例で十分でしょう。

編集 :

テストテーブルを想像してみましょう:

CREATE TABLE pivot_test (
  job_grade            NUMBER,
  course_str    VARCHAR2(1)
);

INSERT INTO pivot_test VALUES (1, 'A');
INSERT INTO pivot_test VALUES (1, 'B');
INSERT INTO pivot_test VALUES (1, 'C');
INSERT INTO pivot_test VALUES (1, 'A');
INSERT INTO pivot_test VALUES (1, 'C');
INSERT INTO pivot_test VALUES (2, 'A');
INSERT INTO pivot_test VALUES (2, 'B');
INSERT INTO pivot_test VALUES (2, 'C');
INSERT INTO pivot_test VALUES (2, 'A');
INSERT INTO pivot_test VALUES (3, 'A');
INSERT INTO pivot_test VALUES (3, 'A');
INSERT INTO pivot_test VALUES (3, 'A');
INSERT INTO pivot_test VALUES (3, 'A');
INSERT INTO pivot_test VALUES (3, 'A');
INSERT INTO pivot_test VALUES (3, 'B');
INSERT INTO pivot_test VALUES (3, 'B');
INSERT INTO pivot_test VALUES (3, 'A');
COMMIT;

テストデータは次のようになります。

select * from pivot_test;

 JOB_GRADE COURSE_STR
---------- ----------
         1 A
         1 B
         1 C
         1 A
         1 C
         2 A
         2 B
         2 C
         2 A
         3 A
         3 A
         3 A
         3 A
         3 A
         3 B
         3 B
         3 A

17 rows selected

ここで PIVOT 操作を適用し、結果を取得します。

SQL> SELECT *
  2        FROM pivot_test
  3        PIVOT(COUNT(course_str) FOR course_str IN('A' AS "COURSE_STR.A",
  4                                                  'B' AS "COURSE_STR.B",
  5                                                  'C' AS "COURSE_STR.C"));

 JOB_GRADE COURSE_STR.A COURSE_STR.B COURSE_STR.C
---------- ------------ ------------ ------------
         1            2            1            2
         2            2            1            1
         3            6            2            0

SQL>

集計関数として COUNT() を使用しましたが、SUM()、MAX() などの可能性があります。

お役に立てれば

于 2013-03-19T10:02:03.243 に答える