我希望按if (preg_match_all('/([^{]++)({([^{}]++|(\?R2))*})/', $code, $items, PREG_SET_ORDER)) { // split declarations
,OrderNumber
,Product
和ConveyanceID
对以下查询进行分组,但我想检索所有这些列,最后Trip
所以像这样的例子
sum(Volume)
我该怎么做?
SELECT
OD.[Customer]
,OD.[OrderNumber] 'Order#'
,OD.[Shipper]
,OD.[Product]
,OD.[Dock] 'Dock/Track'
,OD.[Lines] 'Berth/Position'
,[TAMS].[fnc_GetDelayCountByOrderNumber](OD.OrderNumber) 'Delays'
,OD.[ScheduledArrival] 'Sched .Arrival'
,OD.ActiveCheckPointStatus 'Active CheckPoint'
,OD.[CheckPointStatus] 'CheckPoint Status'
,OD.[ContractNumber]
,OD.[Direction]
,SUM(OD.[Volume]) 'Volume'
,OD.[PreviousCheckPointStatus]
,OD.[CheckPointType]
,OD.[SourceContainer]
,OD.[DestinationContainer]
,OD.[UnitsOfMeasure]
,OD.ConveyanceID
,OD.TripId
,OD.NumberOfConveyance
FROM
TAMS.OrderDetail OD
WHERE
OrderNumber = 8394
GROUP BY
PRODUCT, Ordernumber, ConveyanceID, TripID
答案 0 :(得分:1)
你不能。查询中的每一列都必须是GROUP BY或聚合函数。
答案 1 :(得分:1)
您可以执行的一个选项是在这些字段上使用SUM()
OVER()
PARTITION
:
SELECT DISTINCT
OD.[Customer]
,OD.[OrderNumber] 'Order#'
,OD.[Shipper]
,OD.[Product]
,OD.[Dock] 'Dock/Track'
,OD.[Lines] 'Berth/Position'
,[TAMS].[fnc_GetDelayCountByOrderNumber](OD.OrderNumber) 'Delays'
,OD.[ScheduledArrival] 'Sched .Arrival'
,OD.ActiveCheckPointStatus 'Active CheckPoint'
,OD.[CheckPointStatus] 'CheckPoint Status'
,OD.[ContractNumber]
,OD.[Direction]
,OD.[Volume]
,OD.[PreviousCheckPointStatus]
,OD.[CheckPointType]
,OD.[SourceContainer]
,OD.[DestinationContainer]
,OD.[UnitsOfMeasure]
,OD.ConveyanceID
,OD.TripId
,OD.NumberOfConveyance
,SUM(OD.Volume) OVER (PARTITION BY OrderNumber, Product, ConveyanceID, Trip) As SumOfVolume
FROM TAMS.OrderDetail OD
WHERE OrderNumber= 8394
这样做的警告是,这个SUM()
值将出现在每条记录上。
但是,如果您不需要额外的字段,则可以改为:
SELECT OrderNumber 'Order#',
Product,
ConveyanceID,
Trip,
SUM(Volume) As SumOfVolume
FROM TAMS.OrderDetail OD
WHERE OrderNumber= 8394
GROUP BY OrderNumber, Product, ConveyanceID, Trip