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 

我想我误解了一些东西,希望对我做错的任何建议有所了解。由于

  1. 使用无需DISTINCT当您使用GROUP BY
  2. 格式代码
  3. 无需相关子查询,只是简单的聚合函数SUM

LiveDemo

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; 
+0

谢谢,我想我简化了我的示例,因为这实际上是更大的查询的一部分,所以实际上我需要限制查询总和,因为它是我正在构建的查询中的select子句的一部分,有没有办法按照我最初尝试的方式对总和加上条件? –

+0

@RickDane我看不到整张照片,所以我只能猜到。如何添加'TOP 1'像[这里](https://data.stackexchange.com/*/query/376899)? – lad2025

+1

感谢您的帮助,您提供的答案对我提出的问题是有意义的,所以我会将其标记为答案,并且为更大的图片创建一个新帖子,因为它有点复杂,我认为这会更加复杂明确。 –