【问题标题】:SQL - group by into column updatingSQL - 分组到列更新
【发布时间】:2012-12-11 07:40:55
【问题描述】:

我正在使用AdvantureWorks DB,但SalesOrderDetail 表上没有实际销售额值。此行应该包含 LineTotal 按订单 ID 聚合。

我需要将这些值输入到每个订单 ID 行的实际销售额列中:

select SUM(LineTotal) as ActualSales
from Sales.SalesOrderDetail
group by SalesOrderID

【问题讨论】:

    标签: sql sql-server tsql sql-update


    【解决方案1】:

    您需要将要分组的字段添加到查询中:

    select SalesOrderID, sum(LineTotal) as ActualSales 
    from SalesOrderDetail 
    group by SalesOrderID
    

    【讨论】:

    • craigmj,此语句将 ActualSales 显示为别名,但不会更新 ActualSales 列上的值。我错过了什么吗?
    【解决方案2】:

    您可以像这样使用UPDATEJOIN

    UPDATE od
    SET od.ActualSalesColumn = g.ActualSales
    FROM Sales.SalesOrderDetail od
    INNER JOIN
    (
        SELECT 
          SalesOrderDetail, 
          SUM(LineTotal) as ActualSales 
        FROM Sales.SalesOrderDetail 
        GROUP BY SalesOrderID
    ) g ON od.SalesOrderID = g.SalesOrderID;
    

    或者:使用 CTE:

    WITH ActualSales
    AS
    (
         SELECT 
           SalesOrderDetail, 
           SUM(LineTotal) as ActualSales 
         FROM Sales.SalesOrderDetail 
         GROUP BY SalesOrderID
    )
    UPDATE od
    SET od.ActualSalesColumn = g.ActualSales
    FROM Sales.SalesOrderDetail od
    INNER JOIN ActualSales g ON od.SalesOrderID = g.SalesOrderID;
    

    【讨论】:

      【解决方案3】:
      UPDATE x
      SET x.ActualSales = x.NewActualSales
      FROM (
            SELECT ActualSales, SUM(LineTotal) OVER (PARTITION BY SalesOrderID) AS NewActualSales
            FROM Sales.SalesOrderDetail
            ) x
      

      【讨论】:

        猜你喜欢
        • 2011-02-20
        • 2018-01-17
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 2021-11-23
        相关资源
        最近更新 更多