【问题标题】:How do I use SQL column values as column names in Oracle 11如何在 Oracle 11 中使用 SQL 列值作为列名
【发布时间】:2011-11-08 17:07:06
【问题描述】:

我有一张类似这样的桌子:

    Date     |  Communication_Type
   ----------  --------------------
   12/10/2011  EMAIL
   12/10/2011  WEB
   12/10/2011  WEB
   11/10/2011  MAIL
   11/10/2011  FAX
   11/10/2011  FAX
   11/10/2011  EMAIL

我想编写一个查询来显示某个日期的前两种通信类型,但通信类型不限于此处显示的类型,它们可能是 100 种之一。

有没有办法我可以得到这样的输出,即 2011 年 11 月 11 日

<_top_communication_type_count> | <second_top_communication_type_count>
-------------------------------- --------------------------------------
2                                1    

在这种情况下,_top_communication_type_count 将是 FAX_COUNT,但对于 12/11/2011,将是 WEB_COUNT

这有点难以解释,但希望你明白我的意思! 我找到了适用于 mySQL 的示例,但没有找到适用于 Oracle 的示例。

【问题讨论】:

  • 请显示 mySQL 版本(使用它会出现什么错误?)

标签: sql oracle11g


【解决方案1】:

在 Oracle 中不能使用未知值列表作为列名(10g 确实有pivot,但它需要一个已知值列表)。理论上,您可以通过先查询唯一值,然后构建动态查询来做到这一点,但要获得少量有用的结果,需要做很多工作。

以下是一种以正常的基于行的格式返回数据的解决方案(基于@Michael Durrant 的回答,已修改为在 Oracle 中工作):

select *
from   (
   select communication_type
   from   communications c
   where  date = 'the_date'
   order  by count(c.communication_type)
   group  by c.communication_type)
where rownum <= 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多