Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 甲骨文的转盘在它这边_Sql_Oracle_Plsql_Pivot - Fatal编程技术网

Sql 甲骨文的转盘在它这边

Sql 甲骨文的转盘在它这边,sql,oracle,plsql,pivot,Sql,Oracle,Plsql,Pivot,谢谢你的任何帮助,因为我似乎无法理解 我正在运行OracleDB的版本11。我拥有的是下表(订单信息数据): 每个采购订单编号最多可分配40个信息ID,从1到40,每个信息ID将具有相应的信息数据。 那么比如说, PO_NUMBER | INFO_ID | INFO_DATA | ------------------------------------- 500000 | 1 | DRAMA | 500000 | 2 |

谢谢你的任何帮助,因为我似乎无法理解

我正在运行OracleDB的版本11。我拥有的是下表(订单信息数据):

每个采购订单编号最多可分配40个信息ID,从1到40,每个信息ID将具有相应的信息数据。 那么比如说,

PO_NUMBER | INFO_ID |  INFO_DATA    | 
-------------------------------------
500000    |     1   |      DRAMA    | 
500000    |     2   |      BELT     | 
500000    |     3   |      SPANDEX  | 
500001    |     1   |      34572    | 
500001    |     2   |      BONGO    | 
500001    |     3   |      POLYESTER| 
等等

我要做的是以以下格式显示:

PO_NUMBER | INFO_DATA_1 | INFO_DATA_2 | INFO_DATA_3 | ... and so on till INFO_DATA_40
我试过这个:

SELECT
    PO_NUMBER, 
    DECODE (INFO_ID, 1, INFO_DATA) INFO_DATA_1, 
    DECODE (INFO_ID, 2, INFO_DATA) INFO_DATA_2, 
    DECODE (INFO_ID, 3, INFO_DATA) INFO_DATA_3, 
    DECODE (INFO_ID, 4, INFO_DATA) INFO_DATA_4, 
    DECODE (INFO_ID, 5, INFO_DATA) INFO_DATA_5, 
    DECODE (INFO_ID, 6, INFO_DATA) INFO_DATA_6, 
    DECODE (INFO_ID, 7, INFO_DATA) INFO_DATA_7, 
    DECODE (INFO_ID, 8, INFO_DATA) INFO_DATA_8, 
    DECODE (INFO_ID, 9, INFO_DATA) INFO_DATA_9, 
    DECODE (INFO_ID, 10, INFO_DATA) INFO_DATA_10, 
    DECODE (INFO_ID, 11, INFO_DATA) INFO_DATA_11, 
    DECODE (INFO_ID, 12, INFO_DATA) INFO_DATA_12, 
    DECODE (INFO_ID, 13, INFO_DATA) INFO_DATA_13, 
    DECODE (INFO_ID, 14, INFO_DATA) INFO_DATA_14, 
    DECODE (INFO_ID, 15, INFO_DATA) INFO_DATA_15, 
    DECODE (INFO_ID, 16, INFO_DATA) INFO_DATA_16, 
    DECODE (INFO_ID, 17, INFO_DATA) INFO_DATA_17, 
    DECODE (INFO_ID, 18, INFO_DATA) INFO_DATA_18, 
    DECODE (INFO_ID, 19, INFO_DATA) INFO_DATA_19, 
    DECODE (INFO_ID, 20, INFO_DATA) INFO_DATA_20, 
    DECODE (INFO_ID, 21, INFO_DATA) INFO_DATA_21, 
    DECODE (INFO_ID, 22, INFO_DATA) INFO_DATA_22, 
    DECODE (INFO_ID, 23, INFO_DATA) INFO_DATA_23, 
    DECODE (INFO_ID, 24, INFO_DATA) INFO_DATA_24, 
    DECODE (INFO_ID, 25, INFO_DATA) INFO_DATA_25, 
    DECODE (INFO_ID, 26, INFO_DATA) INFO_DATA_26, 
    DECODE (INFO_ID, 27, INFO_DATA) INFO_DATA_27, 
    DECODE (INFO_ID, 28, INFO_DATA) INFO_DATA_28, 
    DECODE (INFO_ID, 29, INFO_DATA) INFO_DATA_29, 
    DECODE (INFO_ID, 30, INFO_DATA) INFO_DATA_30, 
    DECODE (INFO_ID, 31, INFO_DATA) INFO_DATA_31, 
    DECODE (INFO_ID, 32, INFO_DATA) INFO_DATA_32, 
    DECODE (INFO_ID, 33, INFO_DATA) INFO_DATA_33, 
    DECODE (INFO_ID, 34, INFO_DATA) INFO_DATA_35, 
    DECODE (INFO_ID, 35, INFO_DATA) INFO_DATA_35, 
    DECODE (INFO_ID, 36, INFO_DATA) INFO_DATA_36, 
    DECODE (INFO_ID, 37, INFO_DATA) INFO_DATA_37, 
    DECODE (INFO_ID, 38, INFO_DATA) INFO_DATA_38, 
    DECODE (INFO_ID, 39, INFO_DATA) INFO_DATA_39, 
    DECODE (INFO_ID, 40, INFO_DATA) INFO_DATA_40 
    FROM 
        PO_INFO_DATA 
    ORDER BY PO_NUMBER ;
它可以工作,因为它确实将表放在一边,但它会在输出中创建多行,如下所示:

PO_NUMBER | INFO_DATA_1 | INFO_DATA_2 | INFO_DATA_3.....
500000    | DRAMA       |             |
500000    |             | BELT        |
500000    |             |             | SPANDEX
500001    | 34572       |             |
500001    |             | BONGO       |
500001    |             |             | POLYESTER

我不希望此表有多个单独的行。每个PO应该只有一行。请帮助我正确地重新生成查询。

我想您正在寻找以下内容:

    SELECT   po_number,
             MAX (DECODE (info_id, 1, info_data, NULL)) INFO_DATA_1,
             MAX (DECODE (info_id, 2, info_data, NULL)) INFO_DATA_2,
             MAX (DECODE (info_id, 3, info_data, NULL)) INFO_DATA_3,
             ...
        FROM po_info_data
        group by po_number
        Order by po_number;
只需将所有可能的案例添加到INFO_DATA_40即可


请注意,此解决方案不灵活,因为它假设您最多可以有40列,这意味着“信息id”列的最大值可以为40。

Ken,您是对的,我以前找不到它,尽管我确实找过。非常感谢你,这正是我需要的!!!瓦丁波!太好了,这正是我需要的。非常感谢你!
    SELECT   po_number,
             MAX (DECODE (info_id, 1, info_data, NULL)) INFO_DATA_1,
             MAX (DECODE (info_id, 2, info_data, NULL)) INFO_DATA_2,
             MAX (DECODE (info_id, 3, info_data, NULL)) INFO_DATA_3,
             ...
        FROM po_info_data
        group by po_number
        Order by po_number;