2014-06-06 41 views
0

更新COUNT()值的另一列這是我的表events列循環,並從另一個表

event name countBus 
ev12 test NULL 
ev16 paris NULL 

和表klient

event name bus 
ev12 bob True 
ev12 Alice True 
ev12 John False 
ev16 Tom True 
ev16 Peter False 

我試圖做的是通過循環表events的所有行以及針對特定事件和bus=True在表klient中找到的行的更新量。然後將該值更新到表eventscountBus中的特定行。

event的輸出將

ev12 test 2 
ev16 paris 1 

我不提供我嘗試對不起,我甚至不知道從哪裏開始。

感謝您花費您的空閒時間。

+0

您正在構建數據倉庫表嗎?否則,您通常不會存儲可以從當前數據中獲取的信息。 –

回答

1

,你可以用二其子選擇這樣的:

UPDATE events 
SET countBus = (SELECT count(*) 
       FROM klient k 
       WHERE events.event = k.event 
       AND k.bus = 'True') 

或者有加盟,像這樣:

UPDATE e 
SET countBus = t.countBus2 
FROM events e 
INNER JOIN (SELECT event, bus, COUNT(*) countBus2 
      FROM klient 
      WHERE bus = 'True' 
      GROUP BY event, bus) AS t 
ON e.event = k.event 
+0

您的第一個更新腳本與別名無效,它需要:'UPDATE e SET countBus(SELECT .....)FROM events e' and your second one should just'UPDATE e' without event – Tanner

+0

這個失敗的小提琴:http://sqlfiddle.com/#!3/1d9e2/10 – Tanner

1

因此,要打破這件事,並說明了一點,你需要做兩件事情真的:

  1. 查找查詢,會給你每個事件計數
  2. 寫基於查詢的邏輯更新查詢步驟1

查詢來獲取每個事件計數

select e.event, e.name, count(bus) 
from klient k 
inner join events e on k.event = e.event 
where k.bus = N'True' 
group by e.event, e.name 

工作示例:SQL Fiddle

更新查詢

update events 
set countBus = (select count(bus) 
       from klient k 
       where k.event = events.event and k.bus = N'True') 
-- view the results 
select * from events 

工作示例:SQL Fiddle

相關問題