Oracle 8g-如何在没有pivot的情况下创建动态表?
我需要在Oracle8g中创建一个动态表,但是这个版本没有Oracle 8g-如何在没有pivot的情况下创建动态表?,oracle,pivot,Oracle,Pivot,我需要在Oracle8g中创建一个动态表,但是这个版本没有PIVOT属性。我想创建一个这样的表 Date | Code | count 12/04/2016 | a1 | 8 12/05/2016 | a2 | 10 10/06/2016 | a3 | 4 24/10/2016 | a2 | 6 Date | a1 | a2 | a3 12/04/2016 | 8 | | 12/05/2016 |
PIVOT
属性。我想创建一个这样的表
Date | Code | count
12/04/2016 | a1 | 8
12/05/2016 | a2 | 10
10/06/2016 | a3 | 4
24/10/2016 | a2 | 6
Date | a1 | a2 | a3
12/04/2016 | 8 | |
12/05/2016 | | 10 |
10/06/2016 | | | 4
24/10/2016 | | 6 |
代码的数量未定义。这就是我无法创建静态表的原因 使用“普通”透视查询:
SELECT Date,
max( CASE code WHEN 'a1' THEN count END ) As a1,
max( CASE code WHEN 'a2' THEN count END ) As a2,
max( CASE code WHEN 'a3' THEN count END ) As a3
FROM table
GROUP BY Date
PIVOT子句只是一种语法上的糖分,可以更容易地表达上述查询下面使用PIVOT子句的查询与上面的查询相同
SELECT *
FROM (SELECT date, code, count FROM table )
PIVOT (
max( count ) FOR code IN ( 'a1' as a1, 'a2' as a2, 'a3' as a3 )
)
请指定版本号。最好是真实版本号。。。。如果代码的数量未知,那么无论如何都要与pivot进行斗争。那么您想要一个列数未知的表(或只是结果集)?如何消费?这可能是报告层为您做的事情。我只是好奇,如何才能运行一个20年前的Oracle数据库版本?Oracle版本是8i(!),已经有20年了。PIVOT是在oracle11中引入的。我不确定,甚至可能是
案例。。。当
在8i上不可用时。@Wernfried Domscheit CASE表达式比Oracle 8i(ANSII SQL 1992-至少有25年历史)旧得多,并且8i支持它们,请查看文档:看起来CASE是在8i中引入的(至少我在7i中没有找到),所以我认为没有错。