Sql 甲骨文的转盘在它这边
谢谢你的任何帮助,因为我似乎无法理解 我正在运行OracleDB的版本11。我拥有的是下表(订单信息数据): 每个采购订单编号最多可分配40个信息ID,从1到40,每个信息ID将具有相应的信息数据。 那么比如说,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 |
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;