减去具有相同ID的所有行?

时间:2016-06-03 01:27:50

标签: sql sql-server

这是我真正的问题

如何减去具有相同ID的所有行?

这是我对subtact

的查询
SELECT amount - (SELECT amount 
                   FROM tblmonth WHERE id2='1' 
                   AND  type='budget') 
FROM  tblmonth 
WHERE id2='1' 
and   type='actual'

此查询中的问题是,它只能使用id2 =' 1'一次减去一个。

请参阅下面的图片以供参考。谢谢

enter image description here

2 个答案:

答案 0 :(得分:2)

我认为没有理由使用子查询。逻辑最好表达为:

select sum(case when type = 'budget' then amount
                when type = 'actual' then -amount
                else 0
           end)
from tblmonth
where id = 1

答案 1 :(得分:1)

似乎你的id是PK,所以使用top 1来确保查询只返回一条记录。如果它应该返回多个,则可以使用SUM()函数

SELECT TOP 1 ( SELECT TOP 1 amount FROM tblmonth where type = 'budget' and id='1') 
           - ( SELECT TOP 1 amount FROM tblmonth where type = 'actual' and id='1')
as Result
from tblmonth
  

选择Top 1,因为你的结果只返回一条记录,确实需要返回那些结果的表tblmonth记录的数量。