gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:13:31 24 4
gpt4 key购买 nike

我有这个 TableView

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

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

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

有什么动态的方法吗?我看到了很多方法(解码、PL/SQL 循环、联合、11g 枢轴)

但是我还没有根据上面的例子找到对我有用的东西


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

最佳答案

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。

关于sql - Oracle 10g 中的数据透视表/交叉表查询(动态列号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com