我有一个SQL查询,我无法显示我想要的方式。基本上,我们有一个充满交易的表格,我想从今年2月到现在购买一笔(特定类型的交易)。以下是对此的查询:
select sum(amount) as "2011" from transactions
where transaction_type = 'registration'
and date_entered > '2011-02-01'
and date_entered < GetDate()
现在,我还希望看到上一年相同交易的总和:
select sum(amount) as "2010" from transactions
where transaction_type = 'registration'
and date_entered > '2010-02-01'
and date_entered < DateAdd(yy, -1, GetDate())
我似乎无法弄清楚如何并排获得这些总和。我试过了UNION all
,但那些显示在不同的行中,而不是列。
select sum(amount) as "2011" from transactions
where transaction_type = 'registration'
and date_entered > '2011-02-01'
and date_entered < GetDate()
UNION all
select sum(amount) as "2010" from transactions
where transaction_type = 'registration'
and date_entered > '2010-02-01'
and date_entered < DateAdd(yy, -1, GetDate())
我也在这里阅读Stack Overflow,PIVOT
可能是一个选项,但我还没有看到一个例子,我可以操作/调整上面的查询。
有关如何并排获取此数据的任何建议?我确定我忽视了一些简单的事情。
非常感谢!
答案 0 :(得分:1)
你想要一个“枢轴”,它本质上是sum(test * amount)
形式的计算
以下是如何在您的案例中进行支点:
select
sum(case when date_entered between '2011-02-01' and < GetDate() then amount else 0 end) as "2011",
sum(case when date_entered between '2010-02-01' and DateAdd(yy, -1, GetDate() then amount else 0 end) as "2010"
from transactions
where transaction_type = 'registration';
答案 1 :(得分:0)
快速和UGLY解决方案是:
SELECT (
select sum(amount) as "2011" from transactions
where transaction_type = 'registration'
and date_entered > '2011-02-01'
and date_entered < GetDate() ) as '2011',
(select sum(amount) as "2010" from transactions
where transaction_type = 'registration'
and date_entered > '2010-02-01'
and date_entered < DateAdd(yy, -1, GetDate())) as '2010'
您可以将其用于一次性查询,但肯定是我想要添加到生产系统中的。
关于PIVOT的一个好例子,请检查一下:http://rajaramtechtalk.wordpress.com/2008/05/13/how-to-use-pivot-in-sql-2005/
你的问题是你从二月开始,所以使用DATEPART年份不会为你工作,你可能不得不使用月份,他们会对结果做一些工作。