如何将TSQL列分别乘以行,然后求和总数

如何将TSQL列分别乘以行,然后求和总数,sql,tsql,Sql,Tsql,简单示例: SUM(col1 * col2) as X 这就是我似乎得到的: SUM(col1 * col2) as X (col1_row1+col1_row2)*(col2_row1+col2_row2)--(基本上是先“求和”列,然后再相乘) 我需要的是: SUM(col1 * col2) as X (第1列第1列*第2列第1列)+(第1列第2列*第2列) 示例:(请注意,这些可以是不同的值) 应为:Bob=64——(.32*100)+(.32*100) 实际值:Bob=128——(

简单示例:

SUM(col1 * col2) as X
这就是我似乎得到的:

SUM(col1 * col2) as X
(col1_row1+col1_row2)*(col2_row1+col2_row2)--(基本上是先“求和”列,然后再相乘)

我需要的是:

SUM(col1 * col2) as X
(第1列第1列*第2列第1列)+(第1列第2列*第2列)

示例:(请注意,这些可以是不同的值)

应为:Bob=64——(.32*100)+(.32*100)

实际值:Bob=128——(.64*200)不正确

发布我正在处理的实际视图:

SELECT        
    Field.Id as FieldId,
    Field.FieldName,
    Field.FsaId,
    Field.Acres,
    Field.PlanYear,
    Farm.Id as FarmId,
    Grower.Id as GrowerId,
    SUM(FertilizerUses.ApplicationRate * Fertilizer.N) as FertN,
    SUM(Fertilizer.P2o5 * FertilizerUses.ApplicationRate) as Fert2o5,
    SUM(Fertilizer.Mn * FertilizerUses.ApplicationRate) as FertMn,
    SUM(Fertilizer.Mg * FertilizerUses.ApplicationRate) as FertMg,
    SUM(Fertilizer.K2o * FertilizerUses.ApplicationRate) as FertK2o,
    SUM(Fertilizer.Fe * FertilizerUses.ApplicationRate) as FertFe,
    SUM(Fertilizer.S * FertilizerUses.ApplicationRate) as FertS,
    SUM(Fertilizer.B * FertilizerUses.ApplicationRate) as FertB,
    SUM(Fertilizer.Zn * FertilizerUses.ApplicationRate) as FertZn,
    SUM(ManureAnalysis.P2o5 * ManureUses.ManureApplied) as ManP2o5,
    SUM(ManureAnalysis.OrganicN *ManureUses.ManureApplied) as ManOrganicN,
    SUM(ManureAnalysis.Nh4n * ManureUses.ManureApplied) as ManNh4n,
    SUM(ManureAnalysis.N  * ManureUses.ManureApplied) as ManN,
    SUM(ManureAnalysis.K2o * ManureUses.ManureApplied) as ManK2o,
    SUM(ManureAnalysis.Dm * ManureUses.ManureApplied) as ManDm
FROM            
    dbo.Field INNER JOIN
    dbo.Farm ON dbo.Farm.Id = Field.FarmId INNER JOIN
    dbo.Grower ON dbo.Grower.Id = Farm.GrowerId FULL JOIN
    dbo.FertilizerUses ON dbo.Field.Id = dbo.FertilizerUses.FieldId
        AND FertilizerUses.PIversion = Field.PIversion
        AND FertilizerUses.SnapshotVersionId = Field.SnapshotVersionId FULL JOIN
    dbo.Fertilizer ON dbo.FertilizerUses.FertilizerId = dbo.Fertilizer.Id FULL JOIN
    dbo.ManureUses ON dbo.Field.Id = dbo.ManureUses.FieldId 
        AND ManureUses.PIversion = Field.PIversion
        AND ManureUses.SnapshotVersionId = Field.SnapshotVersionId FULL JOIN
    dbo.ManureSource ON dbo.ManureUses.ManureSourceId = dbo.ManureSource.Id FULL JOIN
    dbo.ManureAnalysis ON dbo.ManureUses.ManureAnalysisId = dbo.ManureAnalysis.Id
Group BY
    Field.Id,
    Field.FieldName,
    Field.FsaId,
    Field.Acres,
    Field.PlanYear,
    Farm.Id,
    Grower.Id

我在Sql Server 2017中尝试了此查询:

DECLARE @Temp TABLE (
  [Name] varchar(100),
  Rate decimal(2,2),
  Cost INT
);
INSERT INTO @Temp
SELECT 'Bob',0.32,100 UNION ALL
SELECT 'Bob',0.32,100 UNION ALL
SELECT 'Ted',0.11,78 UNION ALL
SELECT 'Ted',0.44,45
;
SELECT * FROM @Temp;

SELECT 
Name,
SUM(Rate*Cost) AS Value 
FROM @Temp
GROUP BY Name
它给出了两个结果集: |名称|费率|成本| |--|--|--| |鲍勃| 0.32 | 100| |鲍勃| 0.32 | 100| |Ted | 0.11 | 78| |Ted | 0.44 | 45|

以及: |名称|值| |--|--| |鲍勃| 64.00| |泰德| 28.38|


这似乎是对的?

请提供示例数据SQL为文本,不要发布文本图像。与你一样有声望的人应该知道如何使用code.FYI格式化帖子。简化后的帖子是一个超级基本的数据示例。删除长期生产视图难道你不能简单地从总和中扣除费率吗?然后,您需要通过子句将其添加到您的组中。这绝对是正确的,也是我所期望的。我的主要(稍微复杂一点)prod查询也在做同样的事情,但是它的结果翻了一番。。。。hmmmmI在这里发布了我的更复杂的查询,我想有审计/历史记录吗?你能在主帖子上看到我的编辑吗?我重新发布了我的实际视图,如果你想看一下,看看有没有什么突出的地方如果你的prod查询结果翻倍,我猜你的连接不正确。下一步将是分析细节层面的数据,并找出为什么将此作为答案,因为Andreas证实了我所期望的逻辑实际上是正确的!!这是我在某处的加入设置。