首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle 11中将SQL列值用作列名

如何在Oracle 11中将SQL列值用作列名
EN

Stack Overflow用户
提问于 2011-11-09 01:07:07
回答 1查看 1.1K关注 0票数 0

我有一张表,类似于:

代码语言:javascript
复制
    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种之一。

有没有办法可以得到这样的输出,即11/11/2011

代码语言:javascript
复制
<_top_communication_type_count> | <second_top_communication_type_count>
-------------------------------- --------------------------------------
2                                1    

其中,在此实例中,_top_communication_type_count将是FAX_COUNT,但对于12/11/2011,将是WEB_COUNT

这有点难以解释,但希望你能明白我的意思!我找到了mySQL的例子,但没有找到甲骨文的例子。

EN

回答 1

Stack Overflow用户

发布于 2011-11-09 01:20:18

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

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8054289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档