0

以下のように格納されたキーと値のペアを持つOracleデータベースに値があります

KEY     VALUE      SortOrder   REGN NO
---------------------------------------
KEY1    VALUE1      1          123
KEY2    VALUE2      2          123
KEY1    VALUE3      3          123
KEY1    VALUE4      1          456
KEY1    VALUE5      3          456
KEY1    VALUE6      2          456
KEY2    VALUE7      1          678
KEY2    VALUE8      3          678
Key 2   VALUE9      2          678

キーごとに、REGN NO に対してソート順があります。REGN NO ごとに最大 3 つのエントリが許可されますが、任意のキーにすることができます。特定のキーの REGN NO をグループ化して結果を取得する必要があり、ソート順で並べ替える必要があります。たとえば、KEY1の結果は次のようになります

REG NO    OPTION1     OPTION 2    OPTION 3
------------------------------------------
123       VALUE 1     VALUE 3   
456       VALUE 4     VALUE 6     VALUE 5

Oracle SQLステートメントを使用してこれを取得するにはどうすればよいですか?

4

2 に答える 2

0

このソリューションを使用してください)

SELECT REGNO, KEY, MAX(CASE WHEN SortOrder = 1 THEN VALUE ELSE '' END) AS OPTION1,
    MAX(CASE WHEN SortOrder = 2 THEN VALUE ELSE '' END) AS OPTION2,
    MAX(CASE WHEN SortOrder = 3 THEN VALUE ELSE '' END) AS OPTION3
    FROM SomeTable
    GROUP BY REGNO, KEY




  SELECT REGNO, KEY, MAX(CASE WHEN num= 1 THEN VALUE ELSE '' END) AS OPTION1,
            MAX(CASE WHEN num= 2 THEN VALUE ELSE '' END) AS OPTION2,
            MAX(CASE WHEN num= 3 THEN VALUE ELSE '' END) AS OPTION3
    FROM
    (
    SELECT ROW_NUMBER() OVER(PARTITION BY REGNO, KEY ORDER BY SortOrder) AS num, * FROM SomeTable
    ) T GROUP BY REGNO, KEY
于 2013-10-31T00:36:24.710 に答える
0

これを試して:

CREATE TABLE key_value (
  KEY VARCHAR2(20),
  VALUE VARCHAR2(20),
  SortOrder NUMBER,
  REGN_NO NUMBER
);

INSERT INTO key_value VALUES ('KEY1', 'VALUE1', 1, 123);
INSERT INTO key_value VALUES ('KEY2', 'VALUE2', 2, 123);
INSERT INTO key_value VALUES ('KEY1', 'VALUE3', 3, 123);
INSERT INTO key_value VALUES ('KEY1', 'VALUE4', 1, 456);
INSERT INTO key_value VALUES ('KEY1', 'VALUE5', 3, 456);
INSERT INTO key_value VALUES ('KEY1', 'VALUE6', 2, 456);
INSERT INTO key_value VALUES ('KEY2', 'VALUE7', 1, 678);
INSERT INTO key_value VALUES ('KEY2', 'VALUE8', 3, 678);
INSERT INTO key_value VALUES ('KEY2', 'VALUE9', 2, 678);

SELECT key, regn_no, option1, option2, option3
  FROM (
    SELECT
        key,
        regn_no,
        sortorder,
        value AS option1,
        LEAD(value, 1) OVER (PARTITION BY key, regn_no ORDER BY sortorder) AS option2,
        LEAD(value, 2) OVER (PARTITION BY key, regn_no ORDER BY sortorder) AS option3
      FROM key_value
  ) kv
WHERE
  sortorder = (SELECT MIN(sortorder) FROM key_value WHERE key = kv.key AND regn_no = kv.regn_no)
;

出力:

キー REGN_NO OPTION1 OPTION2 OPTION3      
------ ---------- ----------- ------------ ----------- --
キー1 123 バリュー1 バリュー3                    
キー1 456 バリュー4 バリュー6 バリュー5       
キー2 123 バリュー2                                
キー2 678 バリュー7 バリュー9 バリュー8       
于 2013-10-31T00:47:33.057 に答える