我在查询中构建堆积列闪存图表。我想在不同位置的列中拆分值。为了论证,我在位置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创建了具有三个独立部分的堆叠列(hurray!),但是它不是具有值5,3和8,而是返回三个区域16,16,16。 (16 = 5 + 3 + 8)。 显然,Apex正在经历所有解码条件并添加所有值。 我正在努力实现这方面的描述 article
答案 0 :(得分:1)
Apex似乎没有做任何时髦的事情,你可以通过SQL * Plus获得与查询相同的结果。当你这样做时:
count(decode(location_id,41,id,0)) "location1",
..然后计数每行都会增加 - 包含哪一列并不重要,零只被视为任何固定值。我认为您打算使用sum
:
sum(decode(location_id,41,1,0)) "location1",
这里为每一行分配零或一,并对它们求和,得到一个得到一个的数字,即具有指定id
值的数字。
我个人通常使用case
而不是decode
,但结果是一样的:
sum(case when location_id = 41 then 1 else 0 end) "location1",