Sql server 对于使用大小写的select查询,子查询返回了多个值

Sql server 对于使用大小写的select查询,子查询返回了多个值,sql-server,Sql Server,我正在尝试使用包含大小写的select查询&出现以下错误消息: 以下是我的疑问: 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' ELS

我正在尝试使用包含大小写的select查询&出现以下错误消息:

以下是我的疑问:

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

子查询用于什么?您在子查询中选择的表与在外部查询中选择的表相同。在上下文中,子查询需要是只返回一列、最多返回一行的标量子查询

我怀疑你想要这个:

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保留字冲突。

为什么要同时标记MySQL和SQLServer?-同样,这个问题也毫无意义,你想达到什么目的?@Steve,真的很抱歉。这是SQL Server。你能在这方面指导我吗。谢谢。谢谢你的回复。但我要寻找的是在给定值范围内的所有阶值之和。这是出于某种报告目的。再次感谢戈登,谢谢你的帮助和快速反应。这确实帮了大忙。非常感谢。
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);