我想显示最后2列的总数,但无法接缝以获得正确的代码。 这是代码。
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
有人能告诉我正确的方法吗?
答案 0 :(得分:1)
在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
。答案 1 :(得分:1)
如果db接受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