2010-12-12 44 views
0

在SQL Server 2008中,我有Table1,並且希望獲得如預期輸出中所示的輸出。 每次發生動作「計數」時,它會添加/刪除所有相關項目並顯示總數。 假設所有項目都以0計數開始。通過添加和刪除T-SQL計數項目

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

請發佈您迄今爲止編寫的代碼。人們通常不喜歡只爲你寫代碼。 – 2010-12-12 01:58:50

+2

同意。事實上,這是一個工作描述,而不是一個問題。 – 2010-12-12 02:04:15

+0

我希望我知道什麼是解決這個問題的最好方法。即使有關如何解決這個問題的提示,我也會很感激。 – user219628 2010-12-12 02:36:29

回答

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

感謝Joesph的快速響應。你是對的,有一個計算錯誤。這本身就是很大的幫助。您能否告知每次有任何物品計數時如何記錄。 – user219628 2010-12-12 03:28:20

相關問題