是否可以将分组的行求和到另一列,但只显示其中一行的总和结果?

时间:2019-05-03 15:28:37

标签: sql

我有一个查询表,其中包含来自几个用LEFT JOIN连接的表中的数据。到目前为止,一切正常,结果数据是销售订单中的各个项目。我可以将“总销售订单值”拉到一列中,但是我只希望将其显示在该订单的行之一中,或者显示在单独的行中以代表整个订单。

我的想法是要么我汇总总数,要么以某种方式仅在尚未针对该顺序出现时才这样做,或者我使用SUM(),但这似乎仅与GROUP BY一起使用才有效显示总计而不是单个项目。

我真的不知道该怎么做,因为我什至不知道这样做是否可行,而且互联网搜索并没有给我任何看起来有用的结果,它们全都与分组有关。

SELECT         
so."Sales Order#" as 'Sales Order Number',
soi."Sub Total" as 'Sub-Total'

FROM  
"Sales Order Items" AS "soi"
LEFT JOIN 
"Sales Orders" AS "so" ON so."Sales order ID"  = soi."Sales order ID" 

我想添加一列“ TCV”,该列求和具有相同销售订单编号的所有项目的“子总计”值。但我只希望此小计每个订单显示一次(而不是针对每个订单商品)。

Sample Table

2 个答案:

答案 0 :(得分:1)

您可以通过在案例stmt中使用窗口函数轻松实现此目的:

SELECT         
    so.SalesOrderNumber as 'Sales Order Number',
    CASE WHEN LAG(so.id) OVER (PARITION BY so.salesOrderNumber ORDER BY so.id) IS NULL --this row is first in group, order however you determine "First"
        THEN soi.SubTotal
        ELSE NULL
    END AS subTotal
FROM  
    "Sales Order Items" AS soi LEFT JOIN 
    "Sales Orders" AS so ON so.salesOrderId = soi.salesOrderId 

答案 1 :(得分:0)

使用总和创建另一行

  1. 重复查询
  2. 按订单对查询进行分组
  3. 对行值列求和
  4. 使用联合将这个新查询添加到原始查询中。
  5. 在两者上都添加一列,将第一行硬编码为“行”,第二行硬编码为“ order”

您可以添加总计列

  1. 重复查询
  2. 按订单对查询进行分组
  3. 对行值列求和
  4. 将新查询放入原始查询的from子句中,为其指定别名
  5. 按订单号加入查询
  6. 将新查询的sum列添加到第一个查询的select子句中
  7. (可选)您可以使用用例语句仅将其显示为一行。