2009-04-07 26 views
0

私は次の表のスキーマを持っている:条件付き挿入SQL

create table SerialNo2(
IncarnationID_UID counter primary key, 
Mark integer 
); 

は、今私はのはdegreeそれを呼びましょう、テーブルに新しい列を追加したいです。本番表の更新を適用する場合は、SerialNo2表のすべての既存データのMark値に基づいて、degree列にデータを移入する必要があります。これのルールは、

if Mark>90 then degree='A', 
else degree='B' 

上記の機能を達成するための条件付きSQL挿入を書く方法はありますか?

+1

SQL DDLに構文エラーがあります。整数キーワードの後に​​カンマを削除してください。 – onedaywhen

+0

構文は固定されています – Graviton

答えて

5

何か:

UPDATE SerialNo2 SET SerialNo2.Degree = IIf([Mark]>90,"A","B") 
3

UPDATE操作を行い、その後、最初はNULL可能であるとして度の列を定義します。このような

UPDATE SerialNo2 
SET Degree = CASE WHEN Mark > 90 THEN 'A' ELSE 'B' END 
+0

タグは@ DJの答えの構文を使用するMS Accessを示します。 – harpo

+0

はい、ACE/JetがサポートしていないSQL-92構文、特にCASE文を投稿しました。 – onedaywhen

+0

タグが編集されました。私が答えた時、アクセスは言わなかった。 –

0

まず、あなたの新しい列(ANSI-92クエリモードの構文)を作成:

ALTER TABLE SerialNo2 ADD 
    Degree CHAR(1) DEFAULT 'B' NOT NULL; 

あなたがテーブルを照会した場合、直ちに新しいCOLでNULLを持っています†...これはエンジンIMOの大きなバグです。つまり、各行の値をDEFAULTに設定する必要がありましたが、今度はNOT NULLの列にNULLが含まれています。

だから私たちはあなたではなく、ネストされたIIF Sよりも、テストするために複数の値を持っている場合、あなたがTRUE valeuを使用して、スイッチのキーワードを使用することができところで行ごとに

UPDATE SerialNo2 
    SET Degree = IIF(Mark > 90, 'A', 'B'); 

を値をSETする必要が'case else'節など

UPDATE SerialNo2 
    SET Degree = SWICTH(
         Mark > 90, 'A', 
         Mark <= 0, 'X', 
         TRUE, 'B' 
        );