2013-03-07 185 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 

你需要上面的查詢。