2

複数のwhere句に基づいてテーブルを更新する方法はありますか?1つのステートメントで?

update A
set Final = '21'
from StudentTable A
where Student_ID= 4 and bitcm= 0 and receipt= 17



update B
set Final = '22'
from StudentTable B
where Student_ID=4 and bitcm= 0 and receipt =12


update C
set Final ='11'
from StudentTable C
where Student_ID=4 and bitcmp=1 and receipt=17


update D
set Final ='12'
from StudentTable D
where Student_ID=4 and bitcmp=1 and receipt=12

このすべてのステートメントを1つのステートメントに結合する方法はありますか?

4

3 に答える 3

4

はいあります:

UPDATE  A
SET     Final = CASE WHEN bitchcm = 0 AND receipt = 17 THEN '21'
                     WHEN bitchcm = 0 AND receipt = 12 THEN '22'
                     WHEN bitchcm = 1 AND receipt = 17 THEN '11'
                     WHEN bitchcm = 1 AND receipt = 12 THEN '12'
                END
FROM    StudentTable A
WHERE   Student_ID = 4 AND   -- the purpose of the three conditions
        bitcm IN (0,1) AND   -- is to speed up the query. It will not
        receipt IN (12,17)   -- scan the whole records on the table

FINALがの場合INT、値を一重引用符で囲む必要はありません。

于 2013-03-08T14:42:40.337 に答える
3

これらが 4 の 4 つの行のみの場合Student_ID、次のように動作します。

update A
set Final = CASE
    WHEN bitcm=0 and receipt=17 THEN '21'
    WHEN bitcm= 0 and receipt =12 THEN '22'
    WHEN bitcmp=1 and receipt=17 THEN '11'
    WHEN bitcmp=1 and receipt=12 THEN '12'
    END
from StudentTable A
where Student_ID= 4

( と は同じ列であると想定bitcmbitcmpていますが、どのスペルを使用すればよいかわかりません)

より一般的なアプローチは、必要なすべてのキー列と新しい Final 値を含むテーブル (おそらくテーブル変数またはパラメーター) を用意することです。次に、次のように記述します。

UPDATE A
SET Final = B.Final
FROM StudentTable A
INNER JOIN @AboveMentionedTableVariableOrParameter B
ON
    A.Student_ID = B.Student_ID and
    A.bitcm = b.bitcm and
    A.receipt = b.receipt --And add any other necessary conditions here.
于 2013-03-08T14:43:55.447 に答える
1

CASEステートメントを使用できます

UPDATE StudentTable
SET Final = 
 CASE WHEN Student_ID= 4 and bitcm= 0 and receipt= 17 THEN 21
  WHEN Student_ID=4 and bitcm= 0 and receipt =12 THEN 22
  WHEN Student_ID=4 and bitcmp=1 and receipt=17 THEN 11
  WHEN Student_ID=4 and bitcmp=1 and receipt=12 THEN 12
 END
WHERE Student_ID = 4
AND bitcm IN (0,1)
AND receipt IN (12,17) 
于 2013-03-08T14:44:15.357 に答える