我收到错误: -
“当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;
答案 0 :(得分:1)
您在SELECT语句中不能有多个列。试试这个:
DECLARE @summationhours INT
SET @summationhours= (
SELECT SUM(hours)
FROM #temp
WHERE month = 'january-2017'
AND firstName = 'Mike'
)
PRINT @summationhours
答案 1 :(得分:0)
当您编写子查询并且想要指定标量值时,您不能返回多个列和多行。
您不同意两个约束,因为:
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;