首页 > 解决方案 > SQL Dense Rank with Case When

问题描述

我有一个简单的 SQL 行,它告诉我某个时间范围内的所有订单。我们通过电子邮件定义客户。

        ,SUM(CASE WHEN T.Order_Status <> 'CANCELLED' AND T.Date_Created BETWEEN '6/02/2019' and '8/02/2019'  THEN 1 ELSE 0 END) over (partition by Email) TotalOrdersNewBase

现在我想做的是找到一种方法让所有客户都超过一定范围。

这条线告诉我整个期间每月的所有客户

,DENSE_RANK() over (partition by Date order by Email asc) + DENSE_RANK() over (partition by Date order by Email desc) - 1 as TotalCustomers

但是如何将上面的行格式化为仅介于 6/02 和 8/02 之间?

标签: sqlsql-server

解决方案


以下语句应该有效:

,CASE WHEN Date between '06-01-2002' and '08-31-2002' then DENSE_RANK() over (partition by Date order by Email asc) else 0 end + 
CASE WHEN Date between '06-01-2002' and '08-31-2002' then DENSE_RANK() over (partition by Date order by Email desc) - 1 else 0 end as TotalCustomers

注意:我假设日期必须限制在 2002 年 6 月和 2002 年 8 月之间


推荐阅读