通过添加和删除T-SQL计数项目

时间:2010-12-12 01:56:59

标签: sql tsql variables counter

在SQL Server 2008中,我有Table1,我想获得预期输出中显示的输出。 每次发生行动'计数'时,它都会添加/删除所有相关项目并显示总计。 假设所有项目都以0计数开始。

alt text

非常感谢。

CREATE TABLE Table1([Time] [smalldatetime] NULL,[Action] [nvarchar](10) NULL,[Item] [nchar](50) NULL)
insert into Table1 values('2009-08-22 20:34:02','Count','Apple')
insert into Table1 values('2009-08-22 20:34:03','Count','Banana')
insert into Table1 values('2009-08-22 20:34:04','Count','Mango')
insert into Table1 values('2009-08-22 20:34:05','Count','Black Berry')
insert into Table1 values('2009-08-22 20:34:06','Count','Orange')
insert into Table1 values('2009-08-22 20:34:07','Add','Apple')
insert into Table1 values('2009-08-22 20:34:08','Add','Banana')
insert into Table1 values('2009-08-22 20:34:09','Add','Mango')
insert into Table1 values('2009-08-22 20:34:10','Remove','Banana')
insert into Table1 values('2009-08-22 20:34:11','Add','Banana')
insert into Table1 values('2009-08-22 20:34:12','Add','Mango')
insert into Table1 values('2009-08-22 20:34:13','Add','Mango')
insert into Table1 values('2009-08-22 20:34:14','Add','Mango')
insert into Table1 values('2009-08-22 20:34:15','Remove','Mango')
insert into Table1 values('2009-08-22 20:34:17','Count','Apple')
insert into Table1 values('2009-08-22 20:34:18','Add','Banana')
insert into Table1 values('2009-08-22 20:34:19','Add','Banana')
insert into Table1 values('2009-08-22 20:34:20','Remove','Banana')
insert into Table1 values('2009-08-22 20:34:21','Add','Apple')
insert into Table1 values('2009-08-22 20:34:22','Add','Mango')
insert into Table1 values('2009-08-22 20:34:23','Add','Apple')
insert into Table1 values('2009-08-22 20:34:24','Add','Mango')
insert into Table1 values('2009-08-22 20:34:25','Remove','Apple')
insert into Table1 values('2009-08-22 20:34:26','Count','Mango')
insert into Table1 values('2009-08-22 20:34:27','Add','Apple')
insert into Table1 values('2009-08-22 20:34:28','Add','Banana')
insert into Table1 values('2009-08-22 20:34:29','Remove','Apple')
insert into Table1 values('2009-08-22 20:34:30','Remove','Banana')
insert into Table1 values('2009-08-22 20:34:31','Add','Banana')
insert into Table1 values('2009-08-22 20:34:32','Add','Mango')
insert into Table1 values('2009-08-22 20:34:33','Count','Banana')
insert into Table1 values('2009-08-22 20:34:34','Add','Banana')
insert into Table1 values('2009-08-22 20:34:35','Add','Apple')
insert into Table1 values('2009-08-22 20:34:36','Remove','Mango')
insert into Table1 values('2009-08-22 20:34:37','Add','Apple')
insert into Table1 values('2009-08-22 20:34:38','Add','Mango')
insert into Table1 values('2009-08-22 20:34:39','Count','Apple')
insert into Table1 values('2009-08-22 20:34:40','Remove','Apple')
insert into Table1 values('2009-08-22 20:34:41','Remove','Banana')
insert into Table1 values('2009-08-22 20:34:42','Add','Banana')
insert into Table1 values('2009-08-22 20:34:43','Add','Mango')
insert into Table1 values('2009-08-22 20:34:44','Count','Banana')
insert into Table1 values('2009-08-22 20:34:45','Remove','Banana')
insert into Table1 values('2009-08-22 20:34:46','Remove','Apple')
insert into Table1 values('2009-08-22 20:34:47','Remove','Mango')
insert into Table1 values('2009-08-22 20:34:48','Add','Apple')
insert into Table1 values('2009-08-22 20:34:49','Add','Mango')
insert into Table1 values('2009-08-22 20:34:50','Count','Mango')

1 个答案:

答案 0 :(得分:0)

这可以通过左外自连接来实现,如下所示 但是,由于您犯了一些计算错误,所产生的结果可能与您所显示的结果不同。无论如何尝试类似的方法。

select a.time,a.item,
SUM(case 
when b.action='Add' then 1
when b.action='Remove' then -1 
else 0 end)
from table1 as a
left join table1 as b
on a.item=b.item
and b.time<a.time
where a.action='Count'
group by a.time,a.item,a.action
order by 1