2010-12-12 61 views
0

Dans SQL Server 2008, j'ai Table1 et je veux obtenir la sortie comme indiqué dans la sortie attendue. À chaque fois que l'action «Compte» se produit, elle ajoute/supprime tous les éléments pertinents et affiche le total. En supposant que tous les éléments commencent par 0 compte.T-SQL compte les éléments en ajoutant et en supprimant

alt text

Merci beaucoup.

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

Veuillez poster le code que vous avez écrit jusqu'à présent. Les gens n'aiment généralement pas écrire votre code pour vous. –

+2

D'accord. Comme c'est, c'est une description de travail, pas une question. –

+0

Je voudrais savoir quelle est la meilleure façon de résoudre ce problème. J'apprécierai même un indice sur la façon de résoudre ce problème. – user219628

Répondre

0

Ceci peut être réalisé avec une auto jointure externe gauche comme indiqué ci-dessous Cependant, les résultats obtenus sont différents de ce que vous avez montré probablement parce que vous avez fait des erreurs de calcul. Quoi qu'il en soit, essayez une approche similaire.

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

Merci Joesph pour une réponse rapide. Vous avez raison, il y avait une erreur de calcul. C'est une grande aide en soi. Pouvez-vous s'il vous plaît conseiller comment enregistrer chaque fois qu'il y a un compte pour n'importe quel article. – user219628