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

问题描述

declare @mode int

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

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

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

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

标签: sqlsql-server

解决方案


您需要该模式,因此您只需要一列:

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
     );

推荐阅读