子查询使用大小写为select查询返回了多个值

时间:2014-11-05 22:18:42

标签: sql-server

我正在尝试使用case中的选择查询&出现以下错误消息:

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

1 个答案:

答案 0 :(得分: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保留字冲突。