5

fieldの値が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ステートメントのTypeがMainTableのTypeと等しい場合にのみ更新したいと思います。ありがとう

4

2 に答える 2

9

これを試してみてください、

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:このような質問をするときは、テーブルの構造を追加してください。それは大いに役立ちます。

于 2012-11-21T02:13:35.823 に答える
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
于 2012-11-21T01:58:26.863 に答える