我有一个DB正在处理的问题,我怀疑其实是一个非常简单的问题,但我无法解决它。 为简洁起见,我将使用一个非常简化的案例。 假设您有一张表已经存储了不同人员的费用数据,如下所示:
IDPerson Expense data
1 2.00 1/1/14
1 1.00 1/2/14
1 1.00 1/3/14
2 1.00 1/1/14
2 1.00 1/2/14
3 1.00 1/3/14
我需要的是一个查询,它为每个IDPerson提供了在1/2/14之前或之后所做的总费用以及不考虑日期的费用总额,所以
IDPerson TotalExpense ExpenseBefore1/2/14
1 4.00 2.00
2 2.00 2.00
3 1.00 0.00
在我看来,为了得到这个你shuld每个列有不同的where子句(因此标题)
我尝试了什么:
我尝试使用两个查询,一个没有where子句,另一个带有
Where data<=1/2/14
然后我使用UNION来获得最终结果,从技术上来说它是有效的,但是因为它真的很方便,因为真正的项目比这复杂得多,最终的表有更多的字段;有没有其他方法可以获得这个?
P.S。您可能已经注意到英语不是我的母语,对不起任何错误
答案 0 :(得分:0)
SELECT y.IDPerson,y.ExpensesTotal,isnull(x.ExpensesBefore_1_2_2014,0) as ExpensesBefore_1_2_2014 from
(SELECT IDPerson ,sum(expenses) as ExpensesTotal from tableA GROUP BY IDPerson) as y full join ( SELECT tableA.IDPerson , sum(expenses) as ExpensesBefore_1_2_2014 from tableA
where data < '01.02.2014'
GROUP BY tableA.IDPerson ) as x on x.IDPerson = y.IDPerson
此查询应该有效,如果IDPerson是索引或PK,它也应该是快速的。
我已经更新了查询,试试这个。