SQL Server - SUM为子查询返回多个值的函数。这是不允许的,当子查询遵循
问题描述:
我简化了下面的例子,它实际上是一个较大的查询的一部分,所以我确实需要限制总和调用,因为它是我正在构建的一个更大的查询中的select子句的一部分。SQL Server - SUM为子查询返回多个值的函数。这是不允许的,当子查询遵循
我已经做了一些搜索,但我仍然困惑。我是一名开发人员,而不是SQL大师,所以我可能会错过某些明显的东西,但我很困惑。
在伪代码方面,我会试图做的是这样的:
假设我有相匹配的基本查询(使物体,该条款where field4 = '1111' and field2 = '201510'
匹配的记录的集合
。然后,我通过每一个这些迭代,并使用从当前记录的价值,我想执行的求和函数:
(SELECT SUM(ISNULL(t1.field3,0))
FROM table1
where field1 = t1.field1 and field2= t1.field2) SummedValue
我设想为“循环通过”和做算术,每一个,所以,例如,如果在这些迭代之一中T公司的field1 = '3433'
和field2='201510;
一个山谷,那就SUM所有记录field3
符合这一点,但是我得到的错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
这是我使用的SQL:
SELECT
distinct
(SELECT SUM(ISNULL(t1.field3,0)) FROM table1 where field1 = t1.field1 and field2= t1.field2) SummedValue,
t1.field1,
t1.field2
from
table1 t1 where field4 = '1111' and field2 = '201510'
GROUP BY t1.field1, field2
我想我误解了一些东西,希望对我做错的任何建议有所了解。由于
答
- 使用无需
DISTINCT
当您使用GROUP BY
- 格式代码
- 无需相关子查询,只是简单的聚合函数
SUM
CREATE TABLE #table1(field1 INT, field2 INT, field3 INT, field4 INT);
INSERT INTO #table1 VALUES(1, 201510, 3, 1111);
INSERT INTO #table1 VALUES(1, 201510, 3, 1111);
INSERT INTO #table1 VALUES(1, 201510, NULL, 1111);
SELECT
t1.field1,
t1.field2,
[SummedValue] = SUM(ISNULL(t1.field3, 0))
FROM #table1 t1
WHERE t1.field4 = '1111'
AND t1.field2 = '201510'
GROUP BY t1.field1, field2;
谢谢,我想我简化了我的示例,因为这实际上是更大的查询的一部分,所以实际上我需要限制查询总和,因为它是我正在构建的查询中的select子句的一部分,有没有办法按照我最初尝试的方式对总和加上条件? –
@RickDane我看不到整张照片,所以我只能猜到。如何添加'TOP 1'像[这里](https://data.stackexchange.com/stackoverflow/query/376899)? – lad2025
感谢您的帮助,您提供的答案对我提出的问题是有意义的,所以我会将其标记为答案,并且为更大的图片创建一个新帖子,因为它有点复杂,我认为这会更加复杂明确。 –