sql查询同一列的差异
Posted
技术标签:
【中文标题】sql查询同一列的差异【英文标题】:sql query for difference of same column 【发布时间】:2018-04-05 11:40:51 【问题描述】:这是我的数据库,显示我的销售额。此处的列类型将 0 作为到期金额,将 1 作为已支付金额。我正在尝试计算剩余到期时间。
code Name due bill date type
--------------------------------------
113 ABC 30 9 2018-04-03 0
113 ABC 7 10 2018-04-03 0
113 ABC 20 11 2018-04-05 1
114 XYZ 25 25 2018-05-06 0
这是我想要的表格,当从 37 中减去 20 时
code Name due
------------------
113 ABC 17
114 XYZ 25
我用过这个查询
select code, name,SUM(amount) from Debit group by code, name, type
上述问题的正确查询是什么? 提前致谢
【问题讨论】:
请不要添加无关标签,这与c#无关 【参考方案1】:你想要这样的东西:
select code, name,
sum(case when type = 0 then due else - due end) as due
from t
where type in (0, 1)
group by code, name;
【讨论】:
这项工作非常适合我。感谢您的回复 如果我因为有 0 而不想显示怎么办 @j_nug 。 . .你的评论是什么意思?你为什么不接受这个答案? 你的答案一点都没错,但是第二条评论更适合初学者使用和易于理解【参考方案2】:这可以通过从GROUP BY
子句中删除[Type]
来解决,并添加一个CASE
表达式:
SELECT code,
[name],
SUM(CASE [Type] WHEN 0 THEN 1 ELSE -1 END * amount) AS due
FROM Debit
GROUP BY code,
[name];
【讨论】:
“8 个金额”应该是“* 个金额” 糟糕!一定是早早就放开了SHIFT! 它把我搞糊涂了一段时间。 :) +1【参考方案3】:你也可以试试下面的查询
SELECT A.code, A.name, (CASE WHEN A.due>A.payment THEN a.due-A.payment
CASE WHEN A.due>0 THEN A.due ELSE 0 END) AS due FROM
(SELECT code,name, sum(case when type = 1 then due end) due,
sum(case when type = 0 then due end) payment
FROM [table] GROUP BY code,name) A
【讨论】:
以上是关于sql查询同一列的差异的主要内容,如果未能解决你的问题,请参考以下文章