我希望在我的C
查询中转换数据,以确认某些数值本质上是否定的,尽管没有这样表示。
我寻找客户余额,其中示例数据集还包括未在数据库中写为否定的信用交易(尽管inv_type
列中信用值SUM
的所有记录都应视为SQL INVOICES
inv_no inv_type cust_no value
1 D 25 10
2 D 35 30
3 C 25 5
4 D 25 50
5 C 35 2
函数中为负数)。举个例子:
SUM
我简单的select cust_no, sum(value) from INVOICES
group by cust_no
函数无法给出正确答案:
CAST
这个查询显然会将客户25号和65号35号的余额相加,尽管预期答案是10-5 + 50 = 55和30 - 2 = 28
我应该以某种方式利用var s = '025056-03110,245056030,1,Standart Discount,Standart Discount,*15,940.00USD*,29/11/2017,1,';
var res = s.match(/\*[^*]*\*|[^\s,][^,]*/g);
console.log(res);
功能吗?不幸的是,我不是最新的底层数据库引擎,但它很有可能成为IBM的起源。到目前为止,大多数基本的SQL代码都已经解决了。
答案 0 :(得分:1)
您可以使用case
内的sum()
表达式。最简单的语法是:
select cust_no,
sum(case when inv_type = 'C' then - value else value end) as total
from invoices
group by cust_no;
请注意,value
可能是数据库中的保留字,因此您可能需要转义列名。
答案 1 :(得分:0)
您应该能够首先编写投影(select)以获取基于inv_type或其他内容的有符号值列,然后对其进行求和。
像这样:
frequent
答案 2 :(得分:0)
如果发票是信用证,您可以在计算负值的总和中加上一个表达式:
select
cust_no,
sum
(
case inv_type
when 'C' then -[value]
else [value]
end
) as [Total]
from INVOICES