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

T-SQL通过添加和删除对项目进行计数,sql,tsql,variables,counter,Sql,Tsql,Variables,Counter,在SQLServer2008中,我有表1,我希望得到预期输出中所示的输出。 每次发生“计数”操作时,都会添加/删除所有相关项并显示总数。 假设所有项目都以0计数开始 非常感谢 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','App

在SQLServer2008中,我有表1,我希望得到预期输出中所示的输出。 每次发生“计数”操作时,都会添加/删除所有相关项并显示总数。 假设所有项目都以0计数开始

非常感谢

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')

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

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

请把你写的代码贴出来。人们通常不喜欢只为您编写代码。事实上,这是一个工作描述,不是一个问题。我希望我知道解决这个问题的最好方法是什么。我会很感激你给我一个提示,告诉我如何解决这个问题。在将时间从smalldatetime更改为datetime格式后,它工作得很好。再次感谢。感谢Joesph的快速回复。你是对的,有一个计算错误。这本身就是很大的帮助。你能告诉我如何记录每一件物品的计数吗。