0

selectステートメントの結果からテーブルを更新するにはどうすればよいですか。これが私のselectステートメントです:

SELECT count(distinct r.[ID])as Total
  FROM Table1 r left join
  Tabel2 a
  on r.ID = a.ID
  where a.Status is null

そして、これは私がやりたいことのようなものであり、それが間違っていることを知っています:

update MyTable
set mycol = total
from
(
SELECT count(distinct r.[ID])as Total
      FROM Table1 r left join
      Tabel2 a
      on r.ID = a.ID
      where a.Status is null)
4

4 に答える 4

1

:でサブクエリを使用しsetます

update MyTable
set mycol = (
  SELECT count(distinct r.[ID])
  FROM Table1 r left join
  Tabel2 a
  on r.ID = a.ID
  where a.Status is null
)
于 2012-11-20T20:17:37.690 に答える
1

あなたがしなければならないのは、いくつかの小さな変更を加えることです。以下は、使用する必要のあるコードです。

update MyTable
set mycol = (SELECT count(distinct r.[ID])as Total
  FROM Table1 r left join
  Tabel2 a
  on r.ID = a.ID
  where a.Status is null)
于 2012-11-20T20:19:22.160 に答える
1

私が想定しているように、両方のテーブルに複数の行があり、サブクエリからの関連する結果で最初のテーブルを行ごとに更新する場合は、結合を追加する必要があります(両方のデータセットが以下に「identifyingfield」と呼んでいるものがあります):

Update MyTable
set mycol = b.total
from
MyTable a
inner join 
(
  SELECT identifyingfield, count(distinct r.[ID])
  FROM Table1 r left join
  Tabel2 a
  on r.ID = a.ID
  where a.Status is null
  group by identifyingfield
) b
ON a.identifyingfield = b.identifyingfield
于 2012-11-20T20:21:35.443 に答える
1

あなたはこのようなことを試みるかもしれません:

with "sums"
as
(
  select 
    F."id"
  , "sum" = sum( F."value" ) over ( partition by F."id" )
  from
    "foo" F
)
update 
  B
set
  B."totals" = S."sum"
from
  "bar" B 
  inner join "sums" S
    on S."id" = B."id";

ここでsql-fiddleを参照してください

于 2012-11-20T20:39:07.917 に答える