【问题标题】:Transpose SQL result that pulls column names and datatype转置提取列名和数据类型的 SQL 结果
【发布时间】:2019-07-09 22:20:40
【问题描述】:

我正在使用 Oracle SQL Developer。我想运行一个 SQL 查询,从某个表中提取 column_name、data_type 和可为空的值。我可以通过运行以下代码来完成此操作:

select column_name, data_type, nullable
from all_tab_columns
where table_name = 'mytable'
order by column_id asc

这样输出结果:

Column_Name | Data_Type | Nullable
-----------------------------------
Column 1    | VARCHAR2  | N
Column 2    | NUMBER    | Y
Column 3    | DATE      | N

为了使这些信息对我有用,我需要转置这些数据,以便 column_name 全部为一行(现在它全部为一列)及其下方的相应数据。它应该看起来像这样。

Column 1 | Column 2 | Column 3
------------------------------
VARCHAR2 | NUMBER   | DATE
N        | Y        | N

有谁知道这样做的最佳方法?在 Teradata 中,这就像运行 case 命令一样简单,但在 Oracle 中似乎不是这种情况(双关语)。任何帮助表示赞赏!

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • @GordonLinoff 添加了编辑。

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

一种方法是使用listagg() 将所有内容放在一个字符串列中:

select listagg(column_name || ',' || data_type || ',' || nullable, ';') within group (order by column_id asc)
from all_tab_columns
where table_name = 'mytable'

【讨论】:

  • 这个问题是它只是让它成为一个大字符串,这对我来说并不是特别有用。不过我很感激你的努力!
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多