访问sql改变参数的位置

时间:2014-05-20 10:30:04

标签: sql ms-access where-clause

我有一个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。您可能已经注意到英语不是我的母语,对不起任何错误

1 个答案:

答案 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,它也应该是快速的。

我已经更新了查询,试试这个。

SQL小提琴:http://sqlfiddle.com/#!3/fdaf0/1