0

我将演示我的问题的一个简单示例,而不是查看我的项目中的长 sql 查询。

我的例子是这样的:

Select DeliveryAddressID, PickupDate, TotalWeight, count(DeliveryAddressID) AS Packages
From DeliveryDB
Where Date1 >= '10-12-2013' AND Date2 <= '15-12-2013'
Group By  PickupDate, DeliveryAddressID

我的结果将是这样的:

http://prntscr.com/1iksoe

我想要实现的是为所有 4 个包裹获取此 DeliveryAddressID,但仍保留总数。这将是这样的。

我想要的预期结果:

http://prntscr.com/1iksr7

我想这样做的原因是因为这样我就可以跟踪每个包裹的条形码,也可以跟踪更多细节。

干杯:-)

4

2 回答 2

2

在大多数数据库中,您可以使用窗口函数来执行此操作:

Select DeliveryAddressID, PickupDate, TotalWeight,
       count(DeliveryAddressID) over (partition by PickupDate, DeliveryAddressID) AS Packages
From DeliveryDB
Where Date1 >= '10-12-2013' AND Date2 <= '15-12-2013';

这将返回所有四行的总数。

编辑:

您可以TotalWeight以相同的方式处理(这不是原始问题的一部分):

Select DeliveryAddressID, PickupDate,
       count(DeliveryAddressID) over (partition by PickupDate, DeliveryAddressID) AS Packages,
       CEILING(SUM(CASE When (Weight <> 0 AND Volumen <> 0) AND Weight >= (Volumen * @zeroVoluFac)
                        Then Weight
                   end) over (partition by PickupDate, DeliveryAddressID)
              ) as TotalWeight
From DeliveryDB
Where Date1 >= '10-12-2013' AND Date2 <= '15-12-2013';
于 2013-07-31T14:01:05.220 回答
1

我不能那么做,但是你会接受细节之后的总行而不是第一N行的零和最后一行的总数,如下所示:

    IdCode      Weight      PickupDate                  
    ----------- ----------- -------------------------   
    12345       5           2013-01-07 00:00:00.0       
    12345       10          2013-01-07 00:00:00.0     
    12345       15          2013-01-07 00:00:00.0     
    12345       20          2013-01-07 00:00:00.0     
    (4 rows)

    Sum(Weight) Count(IdCode) 
    ----------- ------------- 
    50          4            

如果这对您有任何用处,我使用的 SQL 是(对不匹配的列名感到抱歉)

Select IdCode, Weight, PickupDate  
From DeliveryDB  
Group By  PickupDate, IdCode  
ORDER BY PickupDate, IdCode  
COMPUTE sum(Weight), count(IdCode)  by PickupDate, IdCode  

中的COMPUTE中断处给出总计或其他聚合Group By

于 2013-07-31T14:09:36.293 回答