下表的数据类型如下:
ItemName varchar,Date Date,Amt varchar,status varchar
ItemName Date Amt
ABC 1/02/2012 500
ABC 8/03/2012 250
预期结果
ItemName LastMonthAmt CurrentMonthAmt
ABC 500 250
请帮我写一下这个问题的查询。
提前致谢。
我所尝试的内容如下:
declare @T table
(
id varchar(2),
[Date] datetime,
[Amt] varchar(5),
[Status] varchar(5)
)
insert into @T
select '01', '1/02/12', '125', 'LM' union all
--select '01', '1/02/12', '200', 'Exit' union all
select '01', '2/02/12', '250', 'CM' union all
--select '01', '2/02/12', '150', 'CM' union all
select '02', '1/02/12', '300', 'LM' union all
--select '02', '1/02/12', '350', 'CM' union all
--select '02', '2/02/12', '220', 'LM' union all
select '02', '2/02/12', '140', 'CM'
select id,
--convert(varchar(8), [Date], 1) as [Date],
[Amt] as [CM],
[Amt] as [LM]
from
(
select distinct id,
[Amt],
row_number() over(partition by id order by [Date] asc) as rn1,
row_number() over(partition by id order by [Date] desc) as rn2
from @T
) as T
where T.rn1 = 1 or
T.rn2 = 1
group by id, [Amt]
答案 0 :(得分:3)
您可以使用具有与此类似的CASE
表达式的聚合函数:
select itemname,
sum(case when month(date) = month(getdate()) -1 then amt else 0 end) LastMonthAmt,
sum(case when month(date) = month(getdate()) then amt else 0 end) CurrentMonthAmt
from yourtable
group by itemname;