2013-03-07 125 views
-1

表结构错误:“子查询返回多个值”与CASE

Customer 
    ID int not null, 
    Name varchar(100) null 

查询:

SELECT ID, 
    (SELECT CASE WHEN (Name IS NULL AND Name <> '') 
      THEN CAST(1 AS BIT) 
      ELSE CAST(0 AS BIT) END 
    FROM Customer) AS IsNameNullOrWhitespace 

这给了我“子查询返回多个值这是..”。为什么是这样?

+2

...因为子查询返回的值超过1。 – Kermit 2013-03-07 18:31:30

+1

该消息非常有启发性。您的第二个'SELECT'返回多个值 – niculare 2013-03-07 18:31:31

+1

如果您的意思是“为什么> 1行返回?”,这取决于您拒绝共享的数据。如果您的意思是“为什么行>不允许?”,这是因为返回> 1行的子查询是一个RELATION,它必须连接到查询的其余部分;它不能用作标量值。 – 2013-03-07 18:33:31

回答

2

看来,你并不需要一个subquery-你可以嵌入到case顶级select,像这样:

SELECT id, 
     CASE 
     WHEN (name IS NULL 
       AND name <> '') THEN Cast(1 AS BIT) 
     ELSE Cast(0 AS BIT) 
     END AS IsNameNullOrWhitespace 
FROM customer 
+0

我不敢相信我错过了.. – user1151923 2013-03-07 18:34:01

1
SELECT ID, 
Case When IsNull(Name,'') ='' Then CAST(1 AS BIT) Else CAST(0 AS BIT) End 
IsNameNullOrWhitespace 
FROM Customer 

你需要上面的查询。