1

我正在我的查询中构建堆积柱形闪存图表。我想为不同的位置拆分列中的值。为了论证,我在位置 41 有 5 个 id,在位置 21 有 3 个 id,在位置 1 有 8 个 id

select 
''  link,
To_Char(ENQUIRED_DATE,'MON-YY') label, 
count(decode(location_id,41,id,0)) "location1",
count(decode(location_id,21,id,0)) "location2",
count(decode(location_id,1,id,0)) "location3"
from  "my_table"
where 
some_conditions = 'Y';

作为此查询的结果,Apex 正在创建包含三个独立部分的堆叠列(万岁!),但是它没有值 5,3 和 8,而是返回三个区域 16,16,16。(16 = 5 +3+8)。所以很明显 Apex 正在经历所有解码条件并添加所有值。我正在尝试实现 本文中描述的目标

4

1 回答 1

1

Apex 似乎没有做任何时髦的事情,通过 SQL*Plus 运行该查询会得到相同的结果。当你这样做时:

count(decode(location_id,41,id,0)) "location1",

..然后计数每行都会增加 - 您包括哪一列并不重要,并且零被视为任何固定值。我认为您打算使用sum

sum(decode(location_id,41,1,0)) "location1",

在这里,每一行都分配了 0 或 1,将它们相加得出得到 1 的数字,即具有指定id值的数字。

就个人而言,我通常会使用caseover decode,但结果是一样的:

sum(case when location_id = 41 then 1 else 0 end) "location1",
于 2013-05-03T16:44:00.827 回答