【问题标题】:sql pivot with oracle?用oracle的sql数据透视?
【发布时间】:2012-05-15 06:26:43
【问题描述】:

我有下表

    ID    p_name     p_value
   ----   ------     --------------
    1      name       index.htm
    1      path       c:\web\site1
    1      size       400
    1      date       2011-03-12
    1      note       'test site'
    2      name       login.htm
    2      path       c:\web\site1
    2      size       500
    ...    ...        ...
    ...    ...        ...

我需要让它看起来像这样

    ID   Name         Path
   ---   ----------   -------------
    1     index.htm    c:\web\site1
    2     login.htm    c:\web\site1
    ...   ...          ...

我正在阅读其他一些帖子,但我不知道如何在我的示例中应用它! 我只需要主要的“名称”和“路径”,我可以在需要时添加其他的!

【问题讨论】:

  • 什么版本的 Oracle? 10g、11 等?
  • 它有什么不同吗?两者都有通用的工作吗?
  • Case 适用于两者,我相信 11g 有一个 pivot 和 unpivot 函数分析;不确定它是否在 10g 或之前。

标签: sql oracle pivot pivot-table


【解决方案1】:

最简单的方法是排除它,因为对于给定 ID,您似乎有有限数量的 p_name。

尝试 2 - 修改

Select ID, T1.P_Name as Name, T2.P_value as Path
FROM YourTableName T1
INNER JOIN yourTableName T2 
  ON T1.ID = T2.ID 
  and T1.P_Name = 'name' 
  and T2.P_name = 'path'

尝试 1 - 失误

SELECT Id,
CASE p_name when 'name' THEN P_value end as Name,
CASE p_name when 'path' THEN p_value end as Path
FROM yourTableNameHere

【讨论】:

  • 这很好,但是我在名称和路径上得到了带有许多 NULL 的重复 ID,我正在尝试应用“分组依据”但还没有运气
  • 如果我们将每个值最大化并按 ID 分组,情况就会奏效,这取决于哪个性能更好,更容易开发/读取/扩展。缩放是我从案例开始的原因。
【解决方案2】:
select t1.id, t1.p_value name, t2.p_value path
  from mytable t1, mytable t2
 where t1.id = t2.id
   and t1.p_name = 'name'
   and t2.p_name = 'path'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多