这是我的表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
的所有行,并更新表klient
中针对特定事件和bus=True
更新的行数。然后将该值更新为表events
列countBus
中的特定行。
表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
答案 1 :(得分: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