“子查询返回多个值”与CASE
问题描述:
表结构错误:“子查询返回多个值”与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
这给了我“子查询返回多个值这是..”。为什么是这样?
答
看来,你并不需要一个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
答
SELECT ID,
Case When IsNull(Name,'') ='' Then CAST(1 AS BIT) Else CAST(0 AS BIT) End
IsNameNullOrWhitespace
FROM Customer
你需要上面的查询。
...因为子查询返回的值超过1。 – Kermit 2013-03-07 18:31:30
该消息非常有启发性。您的第二个'SELECT'返回多个值 – niculare 2013-03-07 18:31:31
如果您的意思是“为什么> 1行返回?”,这取决于您拒绝共享的数据。如果您的意思是“为什么行>不允许?”,这是因为返回> 1行的子查询是一个RELATION,它必须连接到查询的其余部分;它不能用作标量值。 – 2013-03-07 18:33:31