Sql 对两个表中的重复行值求和

Sql 对两个表中的重复行值求和,sql,group-by,sum,Sql,Group By,Sum,我试图从一行中的两个表中获取以下信息,但当我使用group by时,我总是得到两行信息: 文档标题 Section Doc Year Nr SEC1 PATAG 2017 7386 单据行 Section Doc Year Nr Line Type Quantity SEC1 PATAG 2017 7386 0 1.000000 SEC1 PATAG 2017 7386 4

我试图从一行中的两个表中获取以下信息,但当我使用group by时,我总是得到两行信息:

文档标题

Section Doc     Year    Nr
SEC1    PATAG   2017    7386
单据行

Section Doc     Year    Nr      Line Type   Quantity
SEC1    PATAG   2017    7386    0           1.000000
SEC1    PATAG   2017    7386    4           2.000000
质疑

查询结果

Section Doc     Year    Nr      Quantity    Qtd Client  Qtd Warranty
SEC1    PATAG   2017    7386    1.00        1.00        0.00
SEC1    PATAG   2017    7386    2.00        0.00        2.00
期望结果

Section Doc     Year    Nr      Quantity    Qtd Client  Qtd Warranty
SEC1    PATAG   2017    7386    3.00        1.00        2.00

提前感谢。

您的
群组中的属性太多了。
:您应该删除
lin.intTpEntPagador
。这也意味着您必须更改案例/总结:

Cast(SUM(CASE WHEN lin.intTpEntPagador = 0 THEN lin.fltQuantidade ELSE 0 END) as 
NUMERIC (15,2) ) as [Qtd Client]

您还应该删除
独立的
,如果您也
分组依据
则它没有任何功能。您的
分组依据
中的属性太多:您应该删除
lin.intTpEntPagador
。这也意味着您必须更改案例/总结:

Cast(SUM(CASE WHEN lin.intTpEntPagador = 0 THEN lin.fltQuantidade ELSE 0 END) as 
NUMERIC (15,2) ) as [Qtd Client]
您还应该删除
独立的
,如果您还
按分组

尝试将您的
SUM()
移动到您的
案例之外,则它没有任何功能:

SELECT cab.strCodSeccao as [Section], 
       cab.strAbrevTpDoc as [Doc], 
       cab.strCodExercicio as [Year], 
       cab.intNumero as [Nr], 
       CAST(SUM(lin.fltQuantidade) as NUMERIC (15,2)) as [Quantity],
       CAST(SUM(CASE WHEN lin.intTpEntPagador = 0 
            THEN lin.fltQuantidade
            ELSE 0 
       END) AS NUMERIC (15,2)) as [Qtd Client],
       CAST(SUM(CASE WHEN lin.intTpEntPagador = 4 
            THEN lin.fltQuantidade
            ELSE 0 
       END) AS NUMERIC (15,2)) as [Qtd Warranty]
旁注,如果您已经有了一个
分组依据

请尝试将您的
SUM()
移动到您的
案例之外,则无需在此处使用
DISTINCT

SELECT cab.strCodSeccao as [Section], 
       cab.strAbrevTpDoc as [Doc], 
       cab.strCodExercicio as [Year], 
       cab.intNumero as [Nr], 
       CAST(SUM(lin.fltQuantidade) as NUMERIC (15,2)) as [Quantity],
       CAST(SUM(CASE WHEN lin.intTpEntPagador = 0 
            THEN lin.fltQuantidade
            ELSE 0 
       END) AS NUMERIC (15,2)) as [Qtd Client],
       CAST(SUM(CASE WHEN lin.intTpEntPagador = 4 
            THEN lin.fltQuantidade
            ELSE 0 
       END) AS NUMERIC (15,2)) as [Qtd Warranty]
旁注,如果您已经有了一个
分组依据