sql - Oracle SQL数据透视查询

标签 sql oracle pivot

我在表中有数据,如下所示:

MONTH VALUE

1     100
2     200
3     300
4     400
5     500
6     600


我想编写一个SQL查询,以便给出如下结果:

MONTH_JAN MONTH_FEB MONTH_MAR MONTH_APR MONTH_MAY MONTH_JUN
100       200       300       400       500       600

最佳答案

Oracle 9i +支持:

SELECT SUM(CASE WHEN t.month = 1 THEN t.value ELSE 0 END) AS JAN,
       SUM(CASE WHEN t.month = 2 THEN t.value ELSE 0 END) AS FEB,
       SUM(CASE WHEN t.month = 3 THEN t.value ELSE 0 END) AS MAR,
       SUM(CASE WHEN t.month = 4 THEN t.value ELSE 0 END) AS APR,
       SUM(CASE WHEN t.month = 5 THEN t.value ELSE 0 END) AS MAY,
       SUM(CASE WHEN t.month = 6 THEN t.value ELSE 0 END) AS JUN
  FROM YOUR_TABLE t


您只列出了两列-可能应按年份分组。

有ANSI PIVOT(和UNPIVOT)语法,但是Oracle直到11g才支持它。在9i之前,您必须将CASE语句替换为Oracle特定的DECODE。

关于sql - Oracle SQL数据透视查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4841718/

相关文章:

java - Apache Derby 和 Java - 优化插入

sql - 这是做什么的?

sql - 是否可以在 Sequel 中批量更新?

sql - 我如何知道在 oracle 9i 中哪些值是数字

sql-server - SQL Server PIVOT - 多个聚合

PHP 准备的 sql 语句在调用具有特殊字符的列时中断

相当于 WM_CONCAT 函数的 SQL Server

pivot - FBX 导出 : object pivot is set to center of the scene

mysql - 如何在 MySQL 中返回数据透视表输出?

mysql - 什么是相当于 Oracle 的 'start with...connect by' 的标准 SQL 查询,但不是特定于 DBMS 的