请参阅附件以供参考。让我们说我有一个表CARRIER_RESPONSE
,以下字段Carrier
,Shipment
,Acceptance
,Day
我希望每个承运人每天都能获得累积接受次数。
到目前为止,我已经来到下面的代码:
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.
基本上在每一行我想说明今天承运人已经接受了多少次装运。这可能吗?
谢谢,
王子
运营商响应:
一种方法 - 使用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
我想你想要:
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;
重新阅读后,您似乎需要计算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