我正在尝试使用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
答案 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保留字冲突。