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 
         );