在Oracle SQL中执行累积计数

问题描述 投票:0回答:3

请参阅附件以供参考。让我们说我有一个表CARRIER_RESPONSE,以下字段CarrierShipmentAcceptanceDay

我希望每个承运人每天都能获得累积接受次数。

到目前为止,我已经来到下面的代码:

SELECT Carrier
,Shipment
,Acceptance
,Day
,ROW_NUMBER() OVER (
                        PARTITION BY Carrier
                        , Day
                        , Acceptance
                        ORDER BY Day
                    ) AS "Cumulative Count of Acceptance per Day"
FROM CARRIER_RESPONSE

此代码为我提供了具有接受响应= A的行的正确运行计数,但在具有Acceptance Response = D的行上我还想显示验收响应的运行计数= A.

基本上在每一行我想说明今天承运人已经接受了多少次装运。这可能吗?

谢谢,

王子

运营商响应:

sql oracle count running-total rownum
3个回答
0
投票

一种方法 - 使用sum与分析子句和窗口。

SELECT Carrier
,Shipment
,Acceptance
,Day
,sum(Case when Acceptance is not null then 1 else 0 end) OVER (
                        PARTITION BY Carrier
                        , Day
                        ORDER BY Day
                        ROWS between unbounded preceding and current row
                    ) AS "Cumulative Count of Acceptance per Day"
FROM CARRIER_RESPONSE

0
投票

我想你想要:

SELECT Carrier, Shipment, Acceptance, Day,
       SUM(CASE WHEN Acceptance = 'A' THEN 1 ELSE 0 END) OVER
           (PARTITION BY Carrier
            ORDER BY Day
           ) AS "Cumulative Count of Acceptance per Day"
FROM CARRIER_RESPONSE;

如果Acceptance仅采用值'A'NULL,那么您可以将其缩短为:

SELECT Carrier, Shipment, Acceptance, Day,
       COUNT(Acceptance) OVER
           (PARTITION BY Carrier
            ORDER BY Day
           ) AS "Cumulative Count of Acceptance per Day"
FROM CARRIER_RESPONSE;

0
投票

重新阅读后,您似乎需要计算A和D.

 SELECT Carrier
        ,Shipment
        ,Acceptance
        ,Day
        ,sum(Case when Acceptance='A' then 1 else 0 end) OVER (
                                PARTITION BY Carrier                                
                                ORDER BY Day                                
                            ) AS "Cumulative Count of Acceptance per Day",
sum(Case when Acceptance='D' then 1 else 0 end) OVER (
                                PARTITION BY Carrier                                
                                ORDER BY Day                                
                            ) AS "Cumulative Count for Deny per Day"
        FROM CARRIER_RESPONSE
© www.soinside.com 2019 - 2024. All rights reserved.