2014-11-05 60 views
0

我想它&與case使用select查詢以下錯誤消息返回多個值選擇查詢出現了:子查詢使用情況

Msg 512, Level 16, State 1, Line 1 
Subquery returned more than 1 value. This is not permitted when the subquery 
follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 
下面

是我的查詢:

SELECT 
CASE 
WHEN (SELECT VALUE FROM ORDER WHERE VALUE > 0 AND VALUE < 1000) < 1000 
    THEN 'B1' 
WHEN (SELECT VALUE FROM ORDER WHERE VALUE > 1001 AND VALUE < 2000) < 2000 
    THEN 'B2' 
ELSE 'B3' 
END 
FROM ORDER 
+0

你爲什麼要標記MySQL和SQLServer? - 這個查詢沒有意義,你想達到什麼目的? – Steve 2014-11-05 22:21:46

+0

@Steve,真的很抱歉。它是SQL-Server。你能指導我嗎?謝謝。 – Sunny 2014-11-05 22:25:05

回答

2

什麼是子查詢?您正在從子查詢中的同一個表中選擇外部查詢。在上下文中,子查詢需要是一個標量子查詢,它只返回一列和最多一行。

我懷疑你想這樣的:

SELECT (CASE WHEN VALUE > 0 AND VALUE < 1000 THEN 'B1' 
      WHEN VALUE > 1001 AND VALUE < 2000 THEN 'B2' 
      ELSE 'B3' 
     END) 
FROM ORDER 

編輯:您可以輕鬆地把它變成一個聚合:

SELECT (CASE WHEN VALUE > 0 AND VALUE < 1000 THEN 'B1' 
      WHEN VALUE > 1001 AND VALUE < 2000 THEN 'B2' 
      ELSE 'B3' 
     END), COUNT(*) as cnt 
FROM ORDER o 
GROUP BY (CASE WHEN VALUE > 0 AND VALUE < 1000 THEN 'B1' 
       WHEN VALUE > 1001 AND VALUE < 2000 THEN 'B2' 
       ELSE 'B3' 
      END); 

注意Order是一個表,因爲一個非常,非常糟糕的名字它與SQL保留字衝突。

+0

感謝您的回覆。但我正在尋找落在給定值範圍內的所有訂單價值的總和。這是爲了一些報告目的。再次感謝。 – Sunny 2014-11-05 22:28:05

+0

謝謝Gordon,爲您提供幫助和快速響應。這真的有很大幫助。非常感謝。 – Sunny 2014-11-05 23:04:18

相關問題