我被一些SQL困扰如下
我有两个下拉列表,让用户选择日期,这里是SQL:
SELECT * FROM [CountTable] WHERE (([Date] = @Date) OR ([Date] = @Date2))
结果:
Date UserID Count
18/12/2013 User1 100
19/12/2013 User1 105
19/12/2013 User2 10
现在,我希望有一个SQL命令来计算两个Date之间的Count。 如果UserID相同,则新Count将减去旧Count。 如果在旧日期中找不到UserID,则它仍然是新的Count。
我想要的结果如下:
UserID Counter
User1 5
User2 10
答案 0 :(得分:1)
假设您要从@Date
记录中减去@Date2
记录,您可以执行以下操作:
SELECT
UserID,
SUM(
CASE
WHEN [DATE] = @Date2 THEN Count
ELSE -1*Count
END
) AS Counter
FROM [CountTable]
WHERE (([Date] = @Date) OR ([Date] = @Date2))
GROUP BY UserID
答案 1 :(得分:0)
无论date1是在date2之前还是之后,这都应该有效(反之亦然):
select userid,
sum(case
when [ Date ] = @Date2 and @Date2 > @Date1 then
[ Count ]
when [ Date ] = @Date2 and @Date2 < @Date1 then
- [ Count ]
when [ Date ] = @Date1 and @Date1 > @Date2 then
[ Count ]
when [ Date ] = @Date1 and @Date1 < @Date2 then
- [ Count ]
end) as counter
from [ CountTable ]
where (([ Date ] = @Date) OR ([ Date ] = @Date2))
group by userid