感谢您提前提供任何帮助,因为我似乎无法弄明白。
我正在运行Oracle DB的第11版。我所拥有的是下表(PO_INFO_DATA):
PO_NUMBER | INFO_ID | INFO_DATA |
每个PO_NUMBER最多可分配40个INFO_ID,从1到40,每个INFO_ID将具有相应的INFO_DATA。 所以,例如,
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应该只有一行。请帮我正确重建我的查询。
答案 0 :(得分:1)
我认为你正在寻找类似的东西:
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列,这意味着info_id列的最大值可以为40。