【问题标题】:How to group by result for the same date如何按同一日期的结果分组
【发布时间】:2021-12-12 14:52:21
【问题描述】:

我有两个查询,第一个收集信息,第二个应该总结结果。但是,代码向我显示了重复的结果。例如,对于 2021-10,我有几条记录,我希望每个月都有一条记录。

PROC SQL;     
create table PolisyEnd as 
    select distinct       
    (t4.spr_NRB) as NRB
    ,datepart(t1.PRP_END_DATE) as POLICY_VINTAGE format yymmd7.,

case
    when datepart(t1.PRP_END_DATE) IS NOT NULL and datepart(t1.PRP_END_DATE) - &gv_date_dly. < 0 THEN 'W' 
    when datepart(t1.PRP_END_DATE) IS NOT NULL and datepart(t1.PRP_END_DATE) - &gv_date_dly. >= 0 and datepart(t1.PRP_END_DATE) - &gv_date_dly. <=7 THEN 'U' 
    when datepart(t1.PRP_END_DATE) IS NOT NULL and datepart(t1.PRP_END_DATE) - &gv_date_dly. >= 30 THEN 'A' 
    when datepart(t1.PRP_END_DATE) IS NULL THEN 'NO INFO' 

    end as POLISA_

from 
    cmz.WMDTZDP_BH t1
left join 
        (select distinct kontr_id,obj_oid from cmz.BH_D_ZAB_X_ALOK_&thismonth) t2 
on t2.obj_oid = t1.obj_oid

left join 
        (select distinct data_danych, kontr_id, kre_nrb from dm.BH_WMDTKRE_&thismonth) t3
on t3.kontr_id = t2.kontr_id
 
left join 
        (select distinct spr_NRB, spr_STATUS from _mart.mart_kred) t4
on t4.spr_NRB = t3.kre_nrb 


where datepart(t1.data_danych) between '5Aug2019'd and &gv_date_dly. and t1.Actual = "T"
and t4.spr_STATUS  ="A"
group by 
    datepart(t1.data_danych)   
    ,datepart(t1.PRP_END_DATE)

;

quit;
PROC SQL;   
    create table PolisyEnd1 as
    select distinct
    POLICY_VINTAGE
    ,count(NRB) as NUMBER
    from PolisyEnd
    where POLISA_INFORMACJA ="A"
    group by POLICY_
;
Quit;

这是我收到的输出。但它错了:

【问题讨论】:

  • 这里的目标是什么?你在数什么?

标签: sql sas


【解决方案1】:

GROUP BY 不按格式化值分组。 有些程序可以。

试试

group by 
    put(datepart(t1.data_danych), yymmd7.)
   ,put(datepart(t1.PRP_END_DATE), yymmd7.)

【讨论】:

  • 我在查询的第一部分添加了它,不幸的是没有任何改变:(
【解决方案2】:

解决了。应该将日期更改为字符串

    ,put(datepart(t1.PRP_END_DATE),yymmd7.) as POLICY_VINTAGE, 

【讨论】:

  • 为什么要转换成字符串?只需标准化到一个月内的特定日期。 intnx('month',datepart(t1.PRP_END_DATE),0) as POLICY_VINTAGE format=yymmd7.
【解决方案3】:

您认为第一个查询正在创建什么?为什么要按输出中未包含的变量进行分组?为什么您的 CASE 不考虑目标日期后超过 7 天且不到 30 天的日期?

也许你想做这样的事情?

create table PolisyEnd as 
  select distinct       
   (t4.spr_NRB) as NRB
  ,datepart(t1.data_danych) as DATA_DANYCH_DATE format yymmdd10.
  ,intnx('month',datepart(t1.PRP_END_DATE),0) as POLICY_VINTAGE format yymmd7.
  ,case
    when t1.PRP_END_DATE IS NULL THEN 'NO INFO' 
    when datepart(t1.PRP_END_DATE) < &gv_date_dly. THEN 'W' 
    when datepart(t1.PRP_END_DATE) <= &gv_date_dly. + 7 THEN 'U' 
    when datepart(t1.PRP_END_DATE) >= &gv_date_dly. + 30 THEN 'A' 
    else ' ' /* Between 7 and 30 days */
   end as POLISA_
from cmz.WMDTZDP_BH t1
left join (select distinct kontr_id,obj_oid from cmz.BH_D_ZAB_X_ALOK_&thismonth) t2 
  on t2.obj_oid = t1.obj_oid
left join (select distinct data_danych, kontr_id, kre_nrb from dm.BH_WMDTKRE_&thismonth) t3
  on t3.kontr_id = t2.kontr_id
left join (select distinct spr_NRB, spr_STATUS from _mart.mart_kred) t4
  on t4.spr_NRB = t3.kre_nrb 
where datepart(t1.data_danych) between '5Aug2019'd and &gv_date_dly.
  and t1.Actual = "T"
  and t4.spr_STATUS  ="A"
;

【讨论】:

    猜你喜欢
    • 2017-06-28
    • 1970-01-01
    • 2010-11-06
    • 2020-08-30
    • 2014-04-27
    • 2011-10-07
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多