当Exists没有引入子查询时,只能在选择列表中指定一个表达式?

时间:2017-11-02 03:43:28

标签: sql sql-server tsql

我收到错误: -

  

“当Exists中没有引入子查询时,只能在选择列表中指定一个表达式”

我不确定为什么。有人能指出我正确的方向吗?感谢

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;

3 个答案:

答案 0 :(得分:1)

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

DECLARE @summationhours INT

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

PRINT @summationhours

答案 1 :(得分:0)

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

您不同意两个约束,因为:

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

如果您想分配您的小时总数,您可以使用Serge解决方案,但如果您想在问题中按照自己的意愿管理结果,则必须将这三个信息与其他表格或类似解决方案一起放入JOIN中。请添加更多详细信息,以便我们为您提供帮助。

答案 2 :(得分:0)

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

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;