2010-12-12 7 views
0

In SQL Server 2008 habe ich Table1 und ich möchte die Ausgabe wie in der erwarteten Ausgabe angezeigt bekommen. Jedes Mal, wenn Aktion 'Count' auftritt, werden alle relevanten Elemente hinzugefügt/entfernt und die Summe angezeigt. Angenommen, alle Elemente beginnen mit 0.T-SQL-Elemente zählen durch Hinzufügen und Entfernen

alt text

Vielen Dank.

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

Bitte schreiben Sie den Code, den Sie bisher geschrieben haben. Die Leute schreiben im Allgemeinen nicht einfach Ihren Code für Sie. –

+2

Einverstanden. So wie es ist, ist dies eine Arbeitsbeschreibung, keine Frage. –

+0

Ich wünschte, ich wüsste, was der beste Weg, um das zu lösen. Ich werde auch einen Hinweis darauf schätzen, wie das gelöst werden kann. – user219628

Antwort

0

Dies kann mit einer linken äußeren Selbst erreicht werden kommen, wie unten gezeigt jedoch die erzeugten Ergebnisse unterscheiden von dem, was Sie wahrscheinlich gezeigt haben, weil Sie einige Rechenfehler gemacht. Wie auch immer, versuche einen ähnlichen Ansatz.

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 
+0

Danke Joesph für schnelle Antwort. Sie haben Recht, es gab einen Berechnungsfehler. Dies ist eine große Hilfe für sich. Können Sie uns bitte mitteilen, wie Sie jedes Mal Aufzeichnungen erhalten, wenn ein Artikel gezählt wird? – user219628

Verwandte Themen