列循环并使用另一个表中的COUNT()值更新另一列

时间:2014-06-06 10:25:27

标签: sql sql-server

这是我的表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更新的行数。然后将该值更新为表eventscountBus中的特定行。

event的输出将是

ev12  test  2
ev16  paris 1

我很抱歉没有提供我的尝试,因为我甚至不知道从哪里开始。

感谢您将空闲时间花在这上面。

2 个答案:

答案 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)

所以要打破这个并稍微解释一下你需要做两件事:

  1. 查找将为您提供每个事件的计数的查询
  2. 根据步骤1中的查询逻辑编写更新查询
  3. 查询以获取每个事件的计数

    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