当前位置: 首页 > 面试题库 >

用Oracle转置选择结果

奚无尘
2023-03-14
问题内容

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

我必须基于表元数据(列格式)生成一些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


 类似资料:
  • 我试图选择头衔、姓氏、出生日期和头衔为“销售代表”并且他们出生在1950年之前或之后的国家。 当a把日期放在代码中时,它会给我一个错误。 我认为这是正确的: 它给ORA-01843的错误:不是有效的月份 如果你能帮助我,谢谢你。 以下是表格的示例数据:

  • 2.3.1 块IF构造 a) 块IF的组成和执行 块IF的一般形式可写成: IF(逻辑表达式) THEN ← 块IF语句 块1 ← then块 ELSE 块2 ← else块 END IF 块IF语句不是一个单独语句。块IF语句、ELSE语句和ENDIF语句只能用在块IF中而不能单独使用,它们必须和块IF中其它语句联系起来共同起作用。可以说一个块IF是一个语句块(决不能只包括一个语句),用来实现选

  • 问题内容: 在我开始之前,我知道关于Stackoverflow的问题很多,但是我找不到与我的案子相关的任何问题,因为它们涉及的问题比我需要的复杂得多。 我想要的是一个简单的哑转置,不涉及逻辑。 这是我的选择查询返回的原始表: 通常,这将仅包含1条记录,即一个人的记录 现在我想要的是 因此,无需像Stackoverflow上的大多数类似问题那样进行计数,求和或任何复杂的逻辑。 我该怎么做?我通读了P

  • 主要内容:Oracle INSERT INTO SELECT语句概述,Oracle INSERT INTO SELECT示例在本教程中,您将学习如何使用Oracle 语句将数据从语句的结果中插入到表中。 Oracle INSERT INTO SELECT语句概述 有时候,想要将从其它表中选择数据并将其插入到另一个表中。要做到这一点,可使用Oracle 语句,如下所示: Oracle 语句要求源表和目标表匹配数据类型。 Oracle INSERT INTO SELECT示例 1. 插入所有销售数据

  • 问题内容: 我想设置一个先前选择的要在页面加载时显示的选项。我用以下代码尝试了它: 与 但这是行不通的。有任何想法吗? 问题答案: 这绝对应该工作。确保已将代码放入:

  • select 是 Go 中的一个控制结构,类似于 switch 语句,用于处理异步 IO 操作 如果有多个case都可以运行,select 会随机选出一个执行,其他不会执行。 如果没有可运行的case语句,且有 default 语句,那么就会执行 default 的动作。 如果没有可运行的case语句,且没有 default 语句,select 将阻塞,直到某个 case 通信可以运行 sele