admin

Oracle 10g中的数据透视表/交叉表查询(动态列号)

sql

我有这个表视图

UserName      Product     NumberPurchaces
--------      -------     ---------------
'John Doe'    'Chair'     4
'John Doe'    'Table'     1
'Jane Doe'    'Table'     2
'Jane Doe'    'Bed'       1

如何创建将在Oracle 10g中提供此透视图视图的查询?

 UserName   Chair   Table   Bed
 --------   -----   -----   ---
 John Doe   4       1       0
 Jane Doe   0       2       1

有没有办法动态地做到这一点?我看到了很多方法(解码,PL / SQL循环,联合,11g数据透视)

但根据上述示例,我尚未找到适合我的方法


编辑 :我不知道在开发时间产品的数量或类型,所以这必须是动态的


阅读 348

收藏
2021-05-10

共1个答案

admin

Oracle 11g是第一个支持PIVOT / UNPIVOT的,因此您必须使用:

  SELECT t.username,
         MAX(CASE WHEN t.product = 'Chair' THEN t.numberpurchases ELSE NULL END) AS chair,
         MAX(CASE WHEN t.product = 'Table' THEN t.numberpurchases ELSE NULL END) AS tbl,
         MAX(CASE WHEN t.product = 'Bed' THEN t.numberpurchases ELSE NULL END) AS bed
    FROM TABLE t
GROUP BY t.username

您可以使用DECODE,但是从9i开始就支持CASE。

2021-05-10