2017-02-26 44 views
1

更新栏我写了下面的查询中MySQLSQL - 通过计数

UPDATE mytable atable, 
(SELECT address_one, address_two, COUNT(*) cnt FROM table 
GROUP BY address_one, address_two) btable SET atable.address_count = btable.cnt 
WHERE atable.address_one = btable.address_one AND atable.address_two = btable.address_two 

它计算多少address_oneaddress_two在表中列出,并存储在各自的ADDRESS_COUNT数量。

但是,这工作正常MySQL但不是在SQL Server。我如何解决这个问题SQL Server

+0

请提供具体的错误消息或意外行为的描述。 – Shadow

回答

1

试试这个:

update a 
set a.address_count = b.cnt 
from mytable a 
join (
    select address_one, 
     address_two, 
     COUNT(*) cnt 
    from mytable 
    group by address_one, 
     address_two 
    ) b on a.address_one = b.address_one 
    and a.address_two = b.address_two 

旁注:始终使用显式和现代化的连接语法,而不是基于加入老逗号。

+0

没有工作......它显示:无效的对象名称'atable'。 – mac

+0

@mac - 表示表格不退出。要更新,你首先必须有一张表。这些表的名称是什么? – GurV

+0

我只有一张桌子叫做'mytable'。我刚更新了我的代码... – mac

0

在SQL Server中,利用窗口函数,这是更有效的:

with toupdate as (
     select t.*, 
      count(*) over (partition by address_one, address_two) as cnt 
     from mytable t 
    ) 
update toupdate 
    set address_count = cnt; 

在这两种数据库中,你可以使用相关子查询。所以下面的代码应该同时工作:

update mytable 
    set address_count = (select count(*) 
         from mytable t2 
         where t2.address_one = mytable.address_one and 
           t2.address_two = mytable.address_two 
         );