加入收藏 | 设为首页 | 会员中心 | 我要投稿 孝感站长网 (https://www.0712zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用Oracle转置选择结果

发布时间:2021-02-07 00:01:07 所属栏目:MsSql教程 来源:网络整理
导读:我的问题是,有一些背景: 我必须根据表元数据(列格式)生成一些sql查询,结果如下: TABLENAME1|COL1TABLENAME1|COL2TABLENAME2|COL1TABLENAME2|COL2TABLENAME2|COL3TABLENAME3|COL1TABLENAME4|COL1TABLENAME4|COL2... /*some other 1800 rows */ (是的,它是订

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

我必须根据表元数据(列格式)生成一些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,2,column_name ) c2,3,column_name ) c3,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.

(编辑:孝感站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读