我收到一个错误:-
“当子查询未引入Exists时,只能在select列表中指定一个表达式”
我不知道为什么。有人能给我指明正确的方向吗?谢谢
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;发布于 2017-11-02 03:47:00
不能在SELECT语句中有多个列。试试这个:
DECLARE @summationhours INT
SET @summationhours= (
SELECT SUM(hours)
FROM #temp
WHERE month = 'january-2017'
AND firstName = 'Mike'
)
PRINT @summationhours发布于 2017-11-02 08:39:00
当您编写子查询并且要分配一个标量值时,您不能返回多个列和多个行。
您没有同时考虑两个约束,因为:
SUM(hours), month, firstNameGROUP BY子句,因此每个值组合month, firstName都有一行。如果您想要分配您的总时数,您可以使用Serge解决方案,但是如果您想按照您的问题管理结果,则必须将这三个信息与其他表或类似的解决方案连接起来。请补充更多的细节,以便我可以帮助你。
发布于 2017-11-02 10:53:25
您可以使用以下查询返回多个列,问题是它只返回一行。很可能是结果列表中的最后一行。如果需要查询中的所有行,我建议将其选择到临时表中,并将其作为集合处理。
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;https://stackoverflow.com/questions/47067239
复制相似问题