首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当子查询未被使用时,只能在选择列表中指定一个表达式?

当子查询未被使用时,只能在选择列表中指定一个表达式?
EN

Stack Overflow用户
提问于 2017-11-02 03:43:28
回答 3查看 1K关注 0票数 0

我收到一个错误:-

“当子查询未引入Exists时,只能在select列表中指定一个表达式”

我不知道为什么。有人能给我指明正确的方向吗?谢谢

代码语言:javascript
复制
DECLARE @summationhoursint NVARCHAR(MAX);
SET @summationhours =
(
    SELECT SUM(hours),
           month,
           firstName
    FROM #temp
    WHERE month = 'january-2017'
          AND firstName = 'Mike'
    GROUP BY month,
             firstName
);
PRINT @summationhours;
EN

回答 3

Stack Overflow用户

发布于 2017-11-02 03:47:00

不能在SELECT语句中有多个列。试试这个:

代码语言:javascript
复制
DECLARE @summationhours INT

SET @summationhours= (
  SELECT SUM(hours)
  FROM #temp
  WHERE month = 'january-2017'
  AND firstName = 'Mike'
  )

PRINT @summationhours
票数 1
EN

Stack Overflow用户

发布于 2017-11-02 08:39:00

当您编写子查询并且要分配一个标量值时,您不能返回多个列和多个行。

您没有同时考虑两个约束,因为:

  • 选择字段列表有3个字段:SUM(hours), month, firstName
  • 您的子查询有一个GROUP BY子句,因此每个值组合month, firstName都有一行。

如果您想要分配您的总时数,您可以使用Serge解决方案,但是如果您想按照您的问题管理结果,则必须将这三个信息与其他表或类似的解决方案连接起来。请补充更多的细节,以便我可以帮助你。

票数 0
EN

Stack Overflow用户

发布于 2017-11-02 10:53:25

您可以使用以下查询返回多个列,问题是它只返回一行。很可能是结果列表中的最后一行。如果需要查询中的所有行,我建议将其选择到临时表中,并将其作为集合处理。

代码语言:javascript
复制
DECLARE @summationhours int ;
DECLARE @Mon int;
DECLARE @FName varchar(100);

SELECT @summationhours = hrs, @Mon = mn, @Fname = firstName from
(
    SELECT SUM(hours) hrs,
           month mn,
           firstName
    FROM #temp
    WHERE month = 'january-2017'
          AND firstName = 'Mike'
    GROUP BY month,
             firstName
) t1;
PRINT @summationhours;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47067239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档