SQL Server 错误:当子查询没有用 EXISTS 引入时,选择列表中只能指定一个表达式

Posted

技术标签:

【中文标题】SQL Server 错误:当子查询没有用 EXISTS 引入时,选择列表中只能指定一个表达式【英文标题】:SQL Server error :only one expression can be specified in the select list when the subquery is not introduced with EXISTS 【发布时间】:2018-11-29 22:53:37 【问题描述】:
declare @mode int

select 
    @mode = (select top 1 order_dow, count(*) 
             from orders_denorm 
             group by order_dow 
             order by 2 desc)

我正在尝试使用 SQL Server 查找 order_dow 列的模式。我收到以下错误消息:

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

但是,只有不使用select @mode 的查询才能正常工作。

【问题讨论】:

您似乎错过了消息的在选择列表中部分。如何同时将order_dowcount(*) 分配给@mode 【参考方案1】:

你想要 模式 所以你只想要一列:

select @mode = (select top 1 order_dow from orders_denorm group by order_dow order by count(*) desc);

也许你想要两个:

select @mode = order_dow, @mode_cnt = cnt
from (select top 1 order_dow, count(*) as cnt
      from orders_denorm
      group by order_dow
      order by count(*) desc
     );

【讨论】:

以上是关于SQL Server 错误:当子查询没有用 EXISTS 引入时,选择列表中只能指定一个表达式的主要内容,如果未能解决你的问题,请参考以下文章

SQL 中删除语法的问题 - 当子查询没有与 EXISTS 一起引入时,错误只能在选择列表中指定一个表达式

SQL Server 触发器:子查询返回超过 1 个值

SQL Server 子查询返回超过 1 个值。子查询遵循 =, !=, <, <= , >, >=

sqlserver 表 无法更新和删除 子查询返回的值不止一个

为啥sqlserver查询不到数据

我无法在 Microsoft SQL Server 2014 中创建正确的触发器