2007/05/25(Fri) 22:30:34 編集(投稿者)
■No3865 (質問 さん) に返信
> (1) SELECT (case complete when null then '0' else complete end)as complete FROM customer where ivalue =0
> (2) SELECT isnull(complete,0)as complete FROM customer where ivalue =0
SELECT 句に指定されているのは、ivalue 列ではなく complete 列ですが、それで良いのですよね?
ivalue が NULL なレコードを取得したいのであれば、「WHERE ivalue IS NULL」ですし、
ivalue が0 または NULL なレコードが必要なら、「WHERE (ivalue IS NULL) OR (ivalue = 0)」です。
> 共にivalueが0の場合NULLが返ってきます。
下記データを用いて SQL Server 2005で検証しましたが、再現しません。
(1)(2) いずれの構文でも、「x」という値が返されました。
CREATE TABLE customer ( complete CHAR(1), ivalue NUMERIC(1) );
INSERT INTO customer VALUES ( 'x', 0);
INSERT INTO customer VALUES ( null, 1);
INSERT INTO customer VALUES ( 'y', null );