Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 请求有关如何在一个查询中对多个条件的计数进行分组的帮助_Sql_Ansi Sql_Ansi Sql 92 - Fatal编程技术网

Sql 请求有关如何在一个查询中对多个条件的计数进行分组的帮助

Sql 请求有关如何在一个查询中对多个条件的计数进行分组的帮助,sql,ansi-sql,ansi-sql-92,Sql,Ansi Sql,Ansi Sql 92,我需要统计在给定时间范围内,生效日期早于月底,终止日期早于首个月的用户数量。然后,我需要将这些结果分组成一份按年度和月份格式化的报告。如果订户在2019年2月12日成为订户,并且在2019年10月12日之前一直是订户,则输出需要反映订户本应生效的每个月的计数1,以及订户未生效的计数0。我需要计算每个条件在哪里得到满足,而不仅仅是第一个条件在哪里得到满足 我使用SAS,并尝试在手动创建年-月分组时使用该用例,我希望使用该分组聚合满足每个WHEN条件的订阅者。我怀疑这不会实现我所希望的,因为一旦满足

我需要统计在给定时间范围内,生效日期早于月底,终止日期早于首个月的用户数量。然后,我需要将这些结果分组成一份按年度和月份格式化的报告。如果订户在2019年2月12日成为订户,并且在2019年10月12日之前一直是订户,则输出需要反映订户本应生效的每个月的计数1,以及订户未生效的计数0。我需要计算每个条件在哪里得到满足,而不仅仅是第一个条件在哪里得到满足

我使用SAS,并尝试在手动创建年-月分组时使用该用例,我希望使用该分组聚合满足每个WHEN条件的订阅者。我怀疑这不会实现我所希望的,因为一旦满足第一个条件,案例就会终止,从而消除了这个练习的意义。我需要计算订阅者有效期内的每一年或每一个月。对于CASE,只计算有效订阅的第一个月,由于CASE的工作方式,订阅的剩余期限从计数中删除

    create table subscriber_testing as
        select distinct
            case    
                when    sub_eff_date < '01Feb2018'd and sub_term_date >= '01Jan2018'd then '201801'
                when    sub_eff_date < '01Mar2018'd and sub_term_date >= '01Feb2018'd then '201802'
                when    sub_eff_date < '01Apr2018'd and sub_term_date >= '01Mar2018'd then '201803'
                when    sub_eff_date < '01May2018'd and sub_term_date >= '01Apr2018'd then '201804'
                when    sub_eff_date < '01Jun2018'd and sub_term_date >= '01May2018'd then '201805'
                when    sub_eff_date < '01Jul2018'd and sub_term_date >= '01Jun2018'd then '201806'
                when    sub_eff_date < '01Aug2018'd and sub_term_date >= '01Jul2018'd then '201807'
                when    sub_eff_date < '01Sep2018'd and sub_term_date >= '01Aug2018'd then '201808'
                when    sub_eff_date < '01Oct2018'd and sub_term_date >= '01Sep2018'd then '201809'
                when    sub_eff_date < '01Nov2018'd and sub_term_date >= '01Oct2018'd then '201810'
                when    sub_eff_date < '01Dec2018'd and sub_term_date >= '01Nov2018'd then '201811'
                when    sub_eff_date < '01Jan2019'd and sub_term_date >= '01Dec2018'd then '201812'
                when    sub_eff_date < '01Feb2019'd and sub_term_date >= '01Jan2019'd then '201901'
                when    sub_eff_date < '01Mar2019'd and sub_term_date >= '01Feb2019'd then '201902'
                when    sub_eff_date < '01Apr2019'd and sub_term_date >= '01Mar2019'd then '201903'
                else "n/a"
            end 
        as year_month,
            count(distinct subscriber_ID) as subscriber_count
        from
            prod.subscriber_detail      where
            subscriber_group like '%product_tx_%'
            and
            sub_term_date >= '01jan2018'd
            and
            sub_eff_date <= '31mar2019'd
;
quit;
创建表订阅服务器\u测试为
选择不同的
案例
当分包生效日期<'01Feb2018'd和分包期限日期>='01janu2018'd时,则为'201801'
当子合同生效日期<'2018年3月1日'd和子合同期限日期>='2018年2月1日'd时,则为'201802'
当分项工程生效日期<'2018年4月1日'd和分项工程期限日期>='2018年3月1日'd时,则为'201803'
当附属生效日期<'2018年5月1日'd和附属期限日期>='2018年4月1日'd时,则为'201804'
当附属生效日期<'2018年6月1日'd和附属期限日期>='2018年5月1日'd时,则为'201805'
当附属生效日期<'2018年7月1日'd和附属期限日期>='2018年6月1日'd时,则为'201806'
当分项工程生效日期<'2018年8月1日'd和分项工程期限日期>='2018年7月1日'd时,则为'201807'
当分项工程生效日期<'2018年9月1日>和分项工程期限日期>='2018年8月1日,则为'201808'
当附属生效日期<'2018年10月1日'd和附属期限日期>='2018年9月1日'd时,则为'201809'
当附属生效日期<'2018年11月1日'd和附属期限日期>='2018年10月1日'd时,则为'201810'
当附属生效日期<'2018年12月1日'd和附属期限日期>='2018年11月1日'd时,则为'201811'
当分包生效日期<'2019年1月1日'd和分包期限日期>='2018年12月1日'd时,则为'201812'
当分包生效日期<'01Feb2019'd和分包期限日期>='01janu2019'd时,则为'201901'
当分包生效日期<'2019年3月1日'd和分包期限日期>='2019年2月1日'd时,则为'201902'
当分包生效日期<'2019年4月1日'd和分包期限日期>='2019年3月1日'd时,则为'201903'
其他“不适用”
结束
年(月),,
计数(不同的订户ID)作为订户计数
从…起
prod.subscriber\u详细信息,其中
订阅服务器组,如“%product\u tx\uu%”
和
子条款日期>='2018年1月1日'
和
子生效日期<代码>数据日期\u个月;
填充卡dlm=','dsd;
输入日期1:DATE9。日期2:日期9。;
卡;
2018年1月1日、2018年2月1日
2018年2月1日2018年3月1日
2018年3月1日,2018年4月1日
2018年4月1日、2018年5月1日
2018年5月1日、2018年6月1日
2018年6月1日、2018年7月1日
2018年7月1日、2018年8月1日
2018年8月1日,2018年9月1日
2018年9月1日,2018年10月1日
2018年10月1日,2018年11月1日
2018年11月1日,2018年12月1日
2018年12月1日,2019年1月1日
2019年1月1日、2019年2月1日
2019年2月1日
2019年3月1日,2019年4月1日
2019年4月1日、2019年5月1日
;
跑
PROC-SQL;
将表创建为
选择不同的
a、 日期1为年/月,
计数(不同的订户ID)作为订户计数
从…起
日期/月份a
在b.sub\u生效日期=a.Date1上的左连接prod.subscriber\u详细信息b
哪里
订阅服务器组,如“%product\u tx\uu%”
和
子条款日期>='2018年1月1日'
和
子生效日期<代码>数据日期\u个月;
填充卡dlm=','dsd;
输入日期1:DATE9。日期2:日期9。;
卡;
2018年1月1日、2018年2月1日
2018年2月1日2018年3月1日
2018年3月1日,2018年4月1日
2018年4月1日、2018年5月1日
2018年5月1日、2018年6月1日
2018年6月1日、2018年7月1日
2018年7月1日、2018年8月1日
2018年8月1日,2018年9月1日
2018年9月1日,2018年10月1日
2018年10月1日,2018年11月1日
2018年11月1日,2018年12月1日
2018年12月1日,2019年1月1日
2019年1月1日、2019年2月1日
2019年2月1日
2019年3月1日,2019年4月1日
2019年4月1日、2019年5月1日
;
跑
PROC-SQL;
将表创建为
选择不同的
a、 日期1为年/月,
计数(不同的订户ID)作为订户计数
从…起
日期/月份a
在b.sub\u生效日期=a.Date1上的左连接prod.subscriber\u详细信息b
哪里
订阅服务器组,如“%product\u tx\uu%”
和
子条款日期>='2018年1月1日'
和

需要sub_eff_date Hi@Stats_Help_。谢谢分享这个解决方案。不幸的是,它在结果集中没有产生任何结果。我在结果集中得到了一行,在Year\u Month列中的值为“.”,在subscriber\u count列中的值为空。我确实遵循了您的逻辑,但无论是使用生成的date_months数据步骤还是创建日历表,我都无法使用此解决方案生成所需的输出。我已经创建了一个日历表,但是SAS处理日期的方式令人沮丧。然而,这并没有阻止我在使用基于日期的逻辑时进行计数或求和。谢谢分享这个解决方案。不幸的是,它在结果集中没有产生任何结果。我在结果集中得到了一行,在Year\u Month列中的值为“.”,在subscriber\u count列中的值为空。我确实遵循您的逻辑,但无论是使用生成的日期月数据步骤还是创建日历表,我都无法生成desi
data date_months;
infile cards dlm=',' dsd;
input date1 :DATE9. date2 :DATE9.;
cards;
01Jan2018,01Feb2018
01Feb2018,01Mar2018
01Mar2018,01Apr2018
01Apr2018,01May2018
01May2018,01Jun2018
01Jun2018,01Jul2018
01Jul2018,01Aug2018
01Aug2018,01Sep2018
01Sep2018,01Oct2018
01Oct2018,01Nov2018
01Nov2018,01Dec2018
01Dec2018,01Jan2019
01Jan2019,01Feb2019
01Feb2019,01Mar2019
01Mar2019,01Apr2019
01Apr2019,01May2019
;
RUN;

PROC SQL;
create table subscriber_testing as
        select distinct
             a.Date1 as Year_Month,
            count(distinct subscriber_ID) as subscriber_count
        from
                date_months a
                left join prod.subscriber_detail b ON b.sub_eff_date < a.Date2 AND b.sub_term_date >= a.Date1
        where
            subscriber_group like '%product_tx_%'
            and
            sub_term_date >= '01jan2018'd
            and
            sub_eff_date <= '31mar2019'd
;
quit;