RowNum在SQL中表示并转换为SAS

时间:2014-07-14 19:12:20

标签: sql sas

我有一个包含rownum的SQL代码。如下:

 proc sql;
  create table dt as
 select d1.frst + (rownum - 1) as dt
                           from stg.stvcipc, work.d1                                        
                          where rownum  <=  d1.lst - (d1.frst - 1);quit;

d1.frst和d1.lst是日期值。我不知道什么是rownum意味着什么,尝试做什么。我需要将此代码更改为SAS。和SAS一样吗?

        from sfrstcr r
                     , ssrmeet m
                     , ( select d1.frst + (rownum - 1)  dt
                           from saturn.stvcipc         -- about 1200
                              , ( select min(stvterm_start_date)  frst
                                       , max(stvterm_end_date)    lst
                                    from saturn.stvterm v
                                   where v.stvterm_fa_proc_yr                = '&v_aidy'                                          -- PARM '0910'
                                ) d1
                          where rownum  <=  d1.lst - (d1.frst - 1)
                       ) dt

这是原始代码的一部分。它在select语句中选择

2 个答案:

答案 0 :(得分:1)

Rownum是一个伪列。它对结果集中的记录进行编号。在select语句中满足where条件的第一条记录给出rownum = 1,并且满足相同条件的每个后续记录都会增加rownum。

答案 1 :(得分:0)

根据这个reference,SAS proc SQL有一个名为monotonic()的函数,它提供相同的功能。我不知道它是否可以在一个声明中被调用两次。您可以尝试以下方法:

proc sql;
  create table dt as
     select d1.frst + (monotonic() - 1) as dt
     from stg.stvcipc cross join work.d1                                        
     where monotonic() <=  d1.lst - (d1.frst - 1);
quit;

如果这不起作用,如果不更好地理解代码的意图,就很难说该怎么做。