gpt4 book ai didi

sql - 使用 Oracle 转置选择结果

转载 作者:行者123 更新时间:2023-12-04 07:01:20 24 4
gpt4 key购买 nike

我的问题是,有一些背景:

我必须根据表元数据(列格式)生成一些sql查询,结果类似于:

TABLENAME1|COL1
TABLENAME1|COL2
TABLENAME2|COL1
TABLENAME2|COL2
TABLENAME2|COL3
TABLENAME3|COL1
TABLENAME4|COL1
TABLENAME4|COL2
... /*some other 1800 rows */

(是的,已经下单了。)
我需要的是根据第一列转置此数据,因此预期输出为:
TABLENAME1|COL1|COL2|NULL
TABLENAME2|COL1|COL2|COL3
TABLENAME3|COL1|NULL|NULL
TABLENAME4|COL1|COL2|NULL
/* less then 1800 rows ;-) */

是否可以使用 Oracle SQL?

提前致谢!

最佳答案

如果要为每次调用生成查询或使用硬编码的 max-column-count,则可以执行以下操作:

WITH tab AS
(
SELECT table_name, column_name FROM user_tab_cols WHERE column_id <= 4
) -- user_tab_cols used to provide test data, use your table instead
SELECT MAX(c1) c1,
MAX(c2) c2,
MAX(c3) c3,
MAX(c4) c4
FROM (SELECT table_name,
DECODE( column_id, 1, column_name ) c1,
DECODE( column_id, 2, column_name ) c2,
DECODE( column_id, 3, column_name ) c3,
DECODE( column_id, 4, column_name ) c4
FROM ( SELECT table_name,
column_name,
ROW_NUMBER() OVER ( PARTITION BY table_name ORDER BY column_name ) column_id
FROM tab
)
)
GROUP BY table_name
ORDER BY table_name

如果以那种形式获得它就足够了
TABLENAME1|COL1,COL2
TABLENAME2|COL1,COL2,COL3

看看 Tom Kyte 的 stragg .

关于sql - 使用 Oracle 转置选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788011/

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