繁体   English   中英

在查询的最后一行显示总计

[英]Show totals in last row of query

我想显示最后两列的总数,但无法缝合以获取正确的代码。 这是代码。

 declare @FromDate as datetime
 declare @ToDate as datetime
 set @FromDate='1/1/2018'
 set @ToDate='1/31/2018'

Select
 OrderMain.OrderNumber,
 OrderMain.OrderDate,       
 OrderMain.TotalMiles,
 OFAddStop.FeeValue AS NumberStops

From 
 Ordermain with (readuncommitted)
 Left Outer Join Customer with (readuncommitted) on Ordermain.CustomerID=Customer.CustomerID
 Left outer join OrderFee OFAddStop with (readuncommitted) on OFAddStop.OrderID=OrderMain.OrderID 
   and OFAddStop.Sequence=9 and OFAddStop.SubSequence=6

Where
 Customer.CustomerCode IN('36716')
 and OrderMain.OrderDate >=@FromDate
 and OrderMain.OrderDate <=@ToDate
 and OrderMain.OrderStatus in ('N','A','I','P')

这是查询的示例

 OrderNumber   OrderDate    TotalMiles NumberStops 
  10747511     01/02/18        280        6 
  10750287     01/03/18        118        4 

最后一行应如下所示

 OrderNumber   OrderDate    TotalMiles NumberStops 
  10747511     01/02/18        280        6 
  10750287     01/03/18        118        4    
 Total                         398        10

有人可以告诉我实现此目标的正确方法吗?

在SQL Server中,可以使用GROUPING SETS进行此操作,但是需要一个聚合查询:

Select om.OrderNumber, om.OrderDate,
       SUM(om.TotalMiles) as TotalMiles,
       SUM(oaf.FeeValue) as NumberStops
From Ordermain om Join
     Customer c
     on om.CustomerID = c.CustomerID Left outer join
     OrderFee oaf
     on oaf.OrderID = om.OrderID and
        oaf.Sequence = 9 and oaf.SubSequence = 6
Where c.CustomerCode in ('36716') and
      om.OrderDate >= @FromDate
      om.OrderDate <= @ToDate and
      om.OrderStatus in ('P', 'A', 'I', 'N')  -- couldn't resist
group by grouping sets ( (om.OrderNumber, om.OrderDate), () );

笔记:

  • 表别名使查询更易于编写和阅读。
  • 聚合位于前两列。 我认为这些没有重复。
  • 您正在寻找一个特定的客户,所以join到该表应定期join

如果数据库接受With子句。

 declare @FromDate as datetime
 declare @ToDate as datetime
 set @FromDate='1/1/2018'
 set @ToDate='1/31/2018'

 With
 records as (
   Select
     cast(OrderMain.OrderNumber as varchar(32)) OrderNumber,
     OrderMain.OrderDate,       
     OrderMain.TotalMiles,
     OFAddStop.FeeValue AS NumberStops
   From 
     Ordermain with (readuncommitted)
     Left Outer Join Customer with (readuncommitted) on 
       Ordermain.CustomerID=Customer.CustomerID
     Left outer join OrderFee OFAddStop with (readuncommitted) on 
       OFAddStop.OrderID=OrderMain.OrderID 
       and OFAddStop.Sequence=9 and OFAddStop.SubSequence=6
    Where
      Customer.CustomerCode IN('36716')
      and OrderMain.OrderDate >=@FromDate
      and OrderMain.OrderDate <=@ToDate
      and OrderMain.OrderStatus in ('N','A','I','P')
  )
  Select
     OrderNumber,
     OrderDate,
     TotalMiles,
     NumberStops
  From
     records
  Union All
  Select
    'Total',
    null,
    sum(TotalMiles),
    sum(NumberStops)
  From
     records

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM