您能否解释一下为什么该查询未按预期执行SUM(LI.Unidades)?我希望将所有具有相同LINECOUNT的行加在一起。
首先,我在选择和分组依据中也有LI.Unidades(也需要没有SUM()的LI.Unidades字段,但我只是为了测试而删除了它,但仍然没有正确添加。
SELECT
CASE AL.CodigoEmpresa WHEN 1 THEN '802' WHEN 100 THEN '801' ELSE 'N/A' END AS 'COMPANYID',
D365.Account as 'CUSTACCOUNT',
SUM(LI.Unidades) as 'GROSSWEIGHT',
AL.NumeroLineas as 'LINECOUNT',
'KG' as 'SALESUNIT',
LI.ImporteBruto as 'GROSSAMOUNT'
FROM CabeceraAlbaranCliente AL inner join LineasAlbaranCliente LI on (AL.NumeroAlbaran = LI.NumeroAlbaran and AL.FechaAlbaran = Li.FechaAlbaran and AL.CodigoEmpresa = LI.CodigoEmpresa)
inner join AALPLA_D365Customers D365 on (AL.CifEuropeo = D365.Tax_exempt_number and D365.Plant = AL.CodigoEmpresa)
WHERE AL.EjercicioAlbaran = '2020' and AL.NumeroAlbaran = '14424'
GROUP BY D365.Account, AL.CodigoEmpresa, AL.NumeroAlbaran, AL.NumeroLineas, LI.ImporteBruto
这是我得到的结果:
COMPANYID CUSTACCOUNT GROSSWEIGHT LINECOUNT SALESUNIT GROSSAMOUNT
802 40801 0.0000000000 4 KG 555
802 40801 1.0000000000 4 KG 3000
802 40801 4.0000000000 4 KG 1280
802 40801 16.000000000 4 KG 112
802 40801 100.00000000 13 KG 3123
802 40801 225.00000000 13 KG 11
802 40801 500.00000000 13 KG 100
802 40801 550.00000000 13 KG 30
802 40801 750.00000000 13 KG 12
802 40801 1000.0000000 13 KG 1247
802 40801 1080.0000000 13 KG 1
802 40801 1125.0000000 13 KG 8
802 40801 1200.0000000 13 KG 1765
802 40801 1375.0000000 13 KG 987
802 40801 1475.0000000 13 KG 40
802 40801 2425.0000000 13 KG 30
802 40801 7075.0000000 13 KG 984
我想要的是:
COMPANYID CUSTACCOUNT GROSSWEIGHT LINECOUNT SALESUNIT GROSSAMOUNT
802 40801 21.000000000 4 KG 555
802 40801 21.000000000 4 KG 3000
802 40801 21.000000000 4 KG 1280
802 40801 21.000000000 4 KG 112
802 40801 18880.000000 13 KG 3123
802 40801 18880.000000 13 KG 11
802 40801 18880.000000 13 KG 100
802 40801 18880.000000 13 KG 30
802 40801 18880.000000 13 KG 12
802 40801 18880.000000 13 KG 1247
802 40801 18880.000000 13 KG 1
802 40801 18880.000000 13 KG 8
802 40801 18880.000000 13 KG 1765
802 40801 18880.000000 13 KG 987
802 40801 18880.000000 13 KG 40
802 40801 18880.000000 13 KG 30
802 40801 18880.000000 13 KG 984
我认为您需要累加的总和,而不是合计:
SELECT (CASE AL.CodigoEmpresa WHEN 1 THEN '802' WHEN 100 THEN '801' ELSE 'N/A' END) AS COMPANYID,
D365.Account as 'CUSTACCOUNT',
SUM(LI.Unidades) OVER (ORDER BY LI.Unidades) as GROSSWEIGHT,
AL.NumeroLineas as LINECOUNT,
'KG' as SALESUNIT,
LI.ImporteBruto as GROSSAMOUNT
FROM CabeceraAlbaranCliente AL inner join
LineasAlbaranCliente LI
ON AL.NumeroAlbaran = LI.NumeroAlbaran and
AL.FechaAlbaran = Li.FechaAlbaran and
AL.CodigoEmpresa = LI.CodigoEmpresa inner join
AALPLA_D365Customers D365
on AL.CifEuropeo = D365.Tax_exempt_number and
D365.Plant = AL.CodigoEmpresa
WHERE AL.EjercicioAlbaran = '2020' and AL.NumeroAlbaran = '14424'
如果我正确地理解了这种情况,那么对意外结果的一种可能的解释是,您要根据CASE AL.CodigoEmpresa WHEN 1 THEN '802' WHEN 100 THEN '801' ELSE 'N/A' END
进行分组,但实际的分组是根据AL.CodigoEmpresa
进行分组(当然,所有其他列也是如此。
您需要更改GROUP BY子句:
SELECT
CASE AL.CodigoEmpresa WHEN 1 THEN '802' WHEN 100 THEN '801' ELSE 'N/A' END AS 'COMPANYID',
D365.Account as 'CUSTACCOUNT',
SUM(LI.Unidades) OVER (PARTITION BY ) as 'GROSSWEIGHT',
AL.NumeroLineas as 'LINECOUNT',
'KG' as 'SALESUNIT',
LI.ImporteBruto as 'GROSSAMOUNT'
FROM CabeceraAlbaranCliente AL
inner join LineasAlbaranCliente LI on (AL.NumeroAlbaran = LI.NumeroAlbaran and AL.FechaAlbaran = Li.FechaAlbaran and AL.CodigoEmpresa = LI.CodigoEmpresa)
inner join AALPLA_D365Customers D365 on (AL.CifEuropeo = D365.Tax_exempt_number and D365.Plant = AL.CodigoEmpresa)
WHERE AL.EjercicioAlbaran = '2020' and AL.NumeroAlbaran = '14424'
GROUP BY
D365.Account,
CASE AL.CodigoEmpresa WHEN 1 THEN '802' WHEN 100 THEN '801' ELSE 'N/A' END,
AL.NumeroAlbaran, AL.NumeroLineas, LI.ImporteBruto