SQL - 计算嵌套 select 语句中每一行的总和

SQL - Calculating a sum for each row in a nested select statement

这可能有一个相当简单的解决方案,但由于我对 SQL 还很陌生,我现在已经苦苦挣扎了一段时间,找不到解决方案。我目前正在编写一个视图,我想在其中添加一个嵌套的 select 语句来使用 SUM 函数计算每一行的 KPI。 SUM 工作正常,但它对 all 值而不是每行中的值求和。我试过使用 CTE 和 window 函数,但无法正常工作。

我的代码是:

SELECT
some variables as some aliases
...
, (SELECT SUM([EK_NETTO]+[F_PORTO]+[F_DIFFERENZ_OK])
        FROM [RDWH].[dbo].[F_WARENEINKAUF]
        WHERE [REKO_ID] IN('FAKTRG', 'OFFRG', 'PORTO', 'DIFFOK')
    ) as [gross_purchase_amount]
FROM [RDWH].[dbo].[F_WARENEINKAUF]

这是结果:

https://i.stack.imgur.com/dg3Nl.png

如您所见,每个供应商的值都相同。

非常感谢任何帮助!

如果加入到摘要中,效率可能会更高。

下面的查询假定公共字段是 local_supplier_code。

SELECT
...
, q.[gross_purchase_amount]
FROM [RDWH].[dbo].[F_WARENEINKAUF] t
LEFT JOIN 
(
    SELECT local_supplier_code
    , SUM([EK_NETTO]+[F_PORTO]+[F_DIFFERENZ_OK]) AS gross_purchase_amount
    FROM [RDWH].[dbo].[F_WARENEINKAUF]
    WHERE [REKO_ID] IN ('FAKTRG', 'OFFRG', 'PORTO', 'DIFFOK')
    GROUP BY local_supplier_code
) q ON q.[local_supplier_code] = t.[local_supplier_code]

或者您可以使用 APPLY

SELECT
...
, a.[gross_purchase_amount]
FROM [RDWH].[dbo].[F_WARENEINKAUF] t
OUTER APPLY 
(
    SELECT SUM([EK_NETTO]+[F_PORTO]+[F_DIFFERENZ_OK]) AS gross_purchase_amount
    FROM [RDWH].[dbo].[F_WARENEINKAUF] t2
    WHERE t2.[local_supplier_code] = t.[local_supplier_code]
      AND [REKO_ID] IN ('FAKTRG', 'OFFRG', 'PORTO', 'DIFFOK')
) a

或使用 SUM OVER
但是,此方法仅在求和记录在结果中时有效。

SELECT
...
, SUM(CASE
      WHEN [REKO_ID] IN ('FAKTRG', 'OFFRG', 'PORTO', 'DIFFOK')
      THEN [EK_NETTO]+[F_PORTO]+[F_DIFFERENZ_OK]
      ELSE 0
      END) OVER (PARTITION BY [local_supplier_code]) AS [gross_purchase_amount]
FROM [RDWH].[dbo].[F_WARENEINKAUF] t