给定数据



我需要通过包括SalesNew列来解决这个问题:



SalesNew列将根据条件根据每个商品的组号计算总和。

基于上表的示例。当项目的组号为1时,它将仅复制或保留其销售。如果不为1,则SalesNew列应获取每个组中所有项目的总和,就像在给定的示例中一样,salesNew为项目3和项目4显示20,因为它添加了两个都为10的销售额。因此,项目3和4 salesNew值是20。

我知道求和函数,但这不会显示所需的输出。我希望任何人都可以帮助我。

提前致谢

最佳答案

您可以结合使用SUM(Sales) OVER(PARTITION BY [Group])CASE

SELECT *,
    salesNew =
        CASE
            WHEN [Group] = 1 THEN Sales
            ELSE SUM(Sales) OVER(PARTITION BY [Group])
        END
FROM Data


SQL Fiddle



您也可以使用CROSS APPLY

SELECT
    d.*,
    salesNew =
        CASE
            WHEN [Group] = 1 THEN Sales
            ELSE x.salesNew
        END
FROM Data d
CROSS APPLY(
    SELECT salesNew = SUM(Sales)
    FROM Data
    WHERE [Group] = d.[Group]
)x


SQL Fiddle

09-07 23:27