2012-11-21 137 views
4

我想更新一個tabel字段的值等於select語句的結果的tabel。我有這樣一個表:如何使用SQL Server中的select語句結果更新表

Type  Total# 
A   4 
B   8 
C   1 

我想根據select語句的結果更新上述表。 這裏是我的代碼:

update MainTable 
    set [Total#] = 
    (SELECT count(distinct r.[ID])as Type 
    FROM dbo.TableA r left join 
    dbo.TableB a 
    on r.Post_ID = a.Post_ID 
    where a.Status is null) 

如果我作爲運行的代碼,它是要更新所有行,但我只想更新其中來自select語句類型等於從我MainTable類型。感謝

+0

tableA和tableB的表結構是什麼? –

回答

8

試試這個,

UPDATE x 
SET  x.[Total#] = y.totalCount 
FROM MainTable x 
     INNER JOIN 
     (
      SELECT [Type], COUNT(DISTINCT r.[ID]) totalCount 
      FROM dbo.TableA r 
        LEFT JOIN dbo.TableB a 
         ON r.Post_ID = a.Post_ID 
      WHERE a.STATUS IS NULL 
      GROUP BY [Type] 
     ) y ON x.[Type] = y.[Type] 

PS:問問題,這樣的時候,請添加表格的結構。它有很多幫助。

0

給一個別名到您MainTable,您可以在子查詢中使用它:

update MainTable mt 
    set [Total#] = (SELECT count(distinct r.[ID]) as Type 
        FROM dbo.TableA r 
          left join dbo.TableB a on r.Post_ID = a.Post_ID 
        where a.Status is null 
         and a.AType = mt.AType) 
where mt.AType = @Value 
+0

謝謝,但我得到這個錯誤:必須聲明標量變量「@Value」。 – moe

+0

@moe顯示的查詢是一個例子,如果您不需要where,刪除它或將'@ value'調整爲您要過濾的實際值。 – jachguate

相關問題