0

私のテーブル構造は:table_system:

"ID"               NUMBER NOT NULL ENABLE,
"COUNTRY"          VARCHAR2(10 BYTE) NOT NULL ENABLE,
"COMPANYCODE"      VARCHAR2(50 BYTE) NOT NULL ENABLE,
"SYSTEM"           VARCHAR2(50 BYTE) NOT NULL ENABLE,
"NOTSTARTED"       NUMBER,
"RUNNING"          NUMBER,
"COMPLETED"        NUMBER,
"ACTUALSTARTTIME"  VARCHAR2(5 BYTE),
"ACTUALENDTIME"    VARCHAR2(5 BYTE),
"SEQUENCE"         NUMBER,
"PLANNEDSTARTTIME" VARCHAR2(5 BYTE),
"PLANNEDENDTIME"   VARCHAR2(5 BYTE),
"ESTIMATEDENDTIME" VARCHAR2(5 BYTE),
CONSTRAINT "SYSTEMRUNTIME_PK" PRIMARY KEY ("ID", "COUNTRY", "COMPANYCODE", "SYSTEM") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "SYSTEM" ENABLE

次の出力を取得する出力が必要です。

COMPANYCODE                                         SYSTEM1 SYSTEM2 SYSTEM3 SYSTEM4 SYSTEM5 SYSTEM6 SYSTEM7 SYSTEM8 …   SYSTEM N
--------------------------------------------------  --------------------------- ------------------- ----------------------- ------------------------------  ------------------------------  --------------------    --------------  --------------  --------------  --------------

ここで、システムは「SEQUENCE」属性に従ってソートされます。

私はこのクエリを試しました:

    select distinct companycode, sequence, system,notstarted,running,completed
    from table_system
    where id = (select max(id) from table_system)
    order by companycode, sequence

これは私に次をフェッチします

COMPANYCODE SEQUENCE    SYSTEM  NOTSTARTED  RUNNING COMPLETED
--------------------------------------------------  ----------------------  --------------------------------------------------  ----------------------  ----------------------  ----------------------
1001 Helsinki Branch    1   GAP 2 / Datastage GL    0   0   3
1001 Helsinki Branch    2   SAP GL  0   0   2
1001 Helsinki Branch    3   SAP BW  0   0   2
1002 Copenhagen Branch  1   GAP 2 / Datastage GL    0   0   3
1002 Copenhagen Branch  2   SAP GL  0   0   2
1002 Copenhagen Branch  3   SAP BW  0   0   2
1003 Oslo Branch    1   GAP 2 / Datastage GL    0   0   3
1003 Oslo Branch    2   SAP GL  0   0   2
1003 Oslo Branch    3   SAP BW  0   0   2
1004 (publ) (EUR)   1   EKO 0   0   13
1004 (publ) (EUR)   2   HA Core 0   0   6
1004 (publ) (EUR)   3   HA Post Processor   0   0   5
1004 (publ) (EUR)   4   Datastage GL    3   0   10
1004 (publ) (EUR)   5   Datastage Recon 1   0   3
1004 (publ) (EUR)   11  SAP GL  0   0   4
1004 (publ) (EUR)   21  SAP BW  0   0   4

しかし、私は出力を次のようにしたいと思います:

COMPANYCODE                                         SYSTEM1 SYSTEM2 SYSTEM3 SYSTEM4 SYSTEM5 SYSTEM6 SYSTEM7 SYSTEM8 …   SYSTEM N
--------------------------------------------------  --------------------------- ------------------- ----------------------- ------------------------------  ------------------------------  --------------------    --------------  --------------  --------------  --------------
1001 Helsinki Branch            GAP 2 / Datastage GL    SAP GL  SAP BW                          
1002 Copenhagen Branch          GAP 2 / Datastage GL    SAP GL  SAP BW                          
1003 Oslo Branch                GAP 2 / Datastage GL    SAP GL  SAP BW                          
1004 (publ) (EUR)                       EKO HA Core HA Post Processor   Datastage GL    Datastage Recon SAP GL  SAP BW      

上記のヒントをいただければ幸いです。ありがとうvinayak

4

2 に答える 2

0

それを試してください:

select companycode, COLLECT(system) as systems
    from table_system
    where id = (select max(id) from table_system)    
    group by companycode
    order by companycode, sequence
于 2012-07-24T12:21:14.090 に答える
0

これにはピボット操作を使用できます。ただし、処理するシステムの数が不明であることはできません (解析時に選択された列の数を知る必要があるため):

select * from
(
    select companycode, system,
        row_number() over (partition by id, country, companycode
            order by sequence) as rn
    from table_system
    where id = (select max(id) from table_system)
)
pivot (max(system) for rn in (1 as system1, 2 as system2, 3 as system3,
    4 as system4, 5 as system5, 6 as system6, 7 as system7, 8 as system8))
order by company code;


COMPANYCODE                                        SYSTEM1                                            SYSTEM2                                            SYSTEM3                                            SYSTEM4                                            SYSTEM5                                            SYSTEM6                                            SYSTEM7                                            SYSTEM8
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
1001 Helsinki Branch                               GAP 2 / Datastage GL                               SAP GL                                             SAP BW
1002 Copenhagen Branch                             GAP 2 / Datastage GL                               SAP GL                                             SAP BW
1003 Oslo Branch                                   GAP 2 / Datastage GL                               SAP GL                                             SAP BW
1004 (publ) (EUR)                                  EKO                                                HA Core                                            HA Post Processor                                  Datastage GL                                       Datastage Recon                                    SAP GL                                             SAP BW

したがって、存在するシステムの最大数を確立し、9 as system9, ...それらすべてに対応するためにピボット ( ) に句を追加する必要があります。はrow_number()シーケンス番号を連続した番号に変換するため、会社の 5 番目と 6 番目のシステムの間に大きなギャップはありません1004。システムの最大数ではなく、可能な最大シーケンス番号を処理するためにピボットが必要な場合は別として。

于 2012-07-24T13:45:25.407 に答える