我有一列获取具体金额的列,条件如下。
我尝试了这个以获得他的特定值,但是我得到了多行,应该是单行。
select distinct
(case
when aila.line_type_lookup_code = 'ITEM' and aila.tax_classification_code = 'VAT12 SERVICES' then to_char(aila.assessable_value) else '0'
end) as taxable_lines
from
ap_invoice_lines_all aila
where
aila.invoice_id = '31004'
然后我尝试用这个替换空值。
select distinct
(case
when aila.line_type_lookup_code = 'ITEM' and aila.tax_classification_code = 'VAT12 SERVICES' then nvl(to_char(aila.assessable_value,0)) end) as taxable_lines
from
ap_invoice_lines_all aila
where
aila.invoice_id = '31004'
例如,我有一个名为ap_invoice_lines_all的表,该表具有列名
line_type_lookup_code string
tax_classification_code string
assessable_value double
然后基于上面的查询,我想要的预期输出是
taxable lines
1300
但是我得到的是
taxable lines
0
1300
如何删除结果中的0? 谢谢!
答案 0 :(得分:1)
首先,您使用的是to_char
错误。在这种情况下,该函数应仅具有一个参数:
nvl(to_char(aila.assessable_value,0))
应该是
nvl(to_char(aila.assessable_value),0)
我建议不要在这样的简单查询中使用这样的case表达式来提高可读性。案例表达式是很好的工具,但通常会降低查询的可读性。在这种情况下,您实际上并不需要IF..THEN..ELSE函数(这是使用case表达式的原因)。
第二,您确定只有aila.invoice_id = '31004'
处有记录吗?如果该子句为true的表中实际上有两行,则查询将仅返回两行。在这种情况下,它将找到assessable_value
为空的一行,而不是其中一行。
无论如何,要从结果集中删除零(在这种情况下为空值),只需执行以下操作:
select distinct aila.assessable_value as taxable_lines
from ap_invoice_lines_all aila
where aila.invoice_id = '31004'
and aila.line_type_lookup_code = 'ITEM' -- Originally a condition in the case statement
and aila.tax_classification_code = 'VAT12 SERVICES' -- Originally a condition in the case statement
and aila.assessable_value is not null; -- Removes any null values from the result
或者如果您希望将null值替换为零;
select distinct nvl(aila.assessable_value, 0) as taxable_lines
from ap_invoice_lines_all aila
where aila.invoice_id = '31004'
and aila.line_type_lookup_code = 'ITEM' -- Originally a condition in the case statement
and aila.tax_classification_code = 'VAT12 SERVICES' -- Originally a condition in the case statement
请注意,如果可能存在多行,则distinct
子句将把assessable_value
处的所有行分组为单个行。如果希望所有distinct
为空的行都显示为assessable_value
,则删除0
子句。
最后,如果不应存在重复的ID,则可能要考虑在invoice_id
上实现主键(如果表没有一个)或唯一索引。对于查询中经常使用的ID列,这样做应该是唯一的好习惯。