【问题标题】:How to convert columns to rows in Oracle?Oracle中如何将列转换为行?
【发布时间】:2016-05-22 03:07:20
【问题描述】:

我有一个这种形式的表格(这只是部分视图,表格包含超过 100 列)。

 env_id    property_TYPE   property_name
  1         user            user1
  1         host            host1
  99        user            user2
  99        host            host2
  1         FS              fs1

对于单个 env_id,我有不同种类的属性类型。
我希望将这些详细信息转换为列并采用以下形状:

Env_id     user    host
 1          user1   host1
 99         user2   host2

我怎样才能做到这一点?

【问题讨论】:

    标签: oracle pivot


    【解决方案1】:

    你可以通过PIVOT来做,下面是一个例子

    Select * from (
       select property_name, env_id
       from table t
    )
    pivot 
    (
       count(property_TYPE)
       for property_TYPE in ('USER','HOST')
    )
    order by env_id
    /
    

    【讨论】:

    • property_type 不是标识符,如果我在修改后的代码下方添加使用 Select * from (select property_name, env_id,property_TYPE from table t) pivot (count(property_TYPE) for property_TYPE in ('USER','HOST ') ) 在用户和主机列下按 env_id 排序,我正在获取数字。
    • 如果我使用 min 或 max 代替计数,那么我得到了我想要的输出格式,但是所有行都没有从 3000 中出来,只有 90 行。
    • 我们不能使用数据透视函数,因为这只能用于聚合函数,因为我没有得到我想要的输出。
    【解决方案2】:

    decode 功能的帮助下,我能够实现我的要求。

    pivot也是另一种解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      相关资源
      最近更新 更多