gpt4 book ai didi

sql - Oracle中如何将行转换为列?

转载 作者:行者123 更新时间:2023-12-04 02:40:46 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Oracle SQL pivot query

(3 个回答)


3年前关闭。




我有一个这种形式的表格(这只是部分 View ,表格包含 100 多列)。

 LOAN NUMBER   DOCUMENT_TYPE                DOCUMENT_ID
992452533663 Voters ID XPD0355636
992452533663 Pan card CHXPS5522D
992452533663 Drivers licence DL-0420110141769

对于一个贷款号,我有三种文件作为证明。我希望将这些详细信息转换为列并采用以下形状:
LOAN NUMBER     VOTERS_ID    PAN_CARD     DRIVERS LICENCE
992452533663 XPD0355636 CHXPS5522D DL-0420110141769

如何解决这个问题?

最佳答案

如果您使用的是 Oracle 10g,则可以使用 DECODE将行旋转为列的函数:

CREATE TABLE doc_tab (
loan_number VARCHAR2(20),
document_type VARCHAR2(20),
document_id VARCHAR2(20)
);

INSERT INTO doc_tab VALUES('992452533663', 'Voters ID', 'XPD0355636');
INSERT INTO doc_tab VALUES('992452533663', 'Pan card', 'CHXPS5522D');
INSERT INTO doc_tab VALUES('992452533663', 'Drivers licence', 'DL-0420110141769');

COMMIT;

SELECT
loan_number,
MAX(DECODE(document_type, 'Voters ID', document_id)) AS voters_id,
MAX(DECODE(document_type, 'Pan card', document_id)) AS pan_card,
MAX(DECODE(document_type, 'Drivers licence', document_id)) AS drivers_licence
FROM
doc_tab
GROUP BY loan_number
ORDER BY loan_number;

输出:
LOAN_NUMBER   VOTERS_ID            PAN_CARD             DRIVERS_LICENCE    ------------- -------------------- -------------------- --------------------992452533663  XPD0355636           CHXPS5522D           DL-0420110141769     

You can achieve the same using Oracle PIVOT clause, introduced in 11g:

SELECT *
FROM doc_tab
PIVOT (
MAX(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence')
);

两种解决方案的 SQLFiddle 示例: SQLFiddle example

在此处阅读有关旋转的更多信息: Pivot In Oracle by Tim Hall

关于sql - Oracle中如何将行转换为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19858079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com