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查询同一列的差异的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询显示同一张表的差异

Sql查询在同一查询中查找具有差异条件的计数和总计数

将同一列的今天和从今天开始的总数结合起来会产生一个 sql 查询

sql子查询

java SQL查询elasticsearch?

SQL - GROUP BY 同一列的 3 个值