我们可以使用在sql中创建的同一个表进行连接吗?

我们可以使用在sql中创建的同一个表进行连接吗?,sql,sas,Sql,Sas,我想知道是否可以连接我们正在创建的同一个表,而不必在连接后复制整个表代码 例如: create table tableC as select * from ( select *, min(a) as minA from tableB group by id) as tb0 ) join (select *, min(a) as minA from tableB where min(a) = 1) as tb1 on tb1.id = tb0.

我想知道是否可以连接我们正在创建的同一个表,而不必在连接后复制整个表代码

例如:

create table tableC as
select * 
from (
    select *, min(a) as minA 
     from tableB
     group by id) as tb0 
) 
join (select *, min(a) as minA 
    from tableB
    where min(a) = 1) as tb1
on tb1.id = tb0.id;
在本例中,连接不是必需的,但在某些情况下仍然是必需的。 我的问题是,我们是否可以使用第一个块代码中的表来执行连接,而不必在连接后复制整个代码

更准确地说,我们可以做类似于

create table tableC as
select * 
from (
    select *, min(a) as minA 
     from tableB
     group by id) as tb0 
) 
join (select *
    from **tb0**
    where **minA** = 1) as tb1
on tb1.id = tb0.id;

谢谢

好的,简单明了的方法是创建一个视图:

proc sql noprint;
    create view myView as
    select *, min(a) as minA 
    from tableB
    group by id;
quit;

proc sql noprint;
    select *
    from myView as tb0
    join
    (
        select *
        from myView
        where minA=1
    ) as tb1
    on tb1.id=tb2.id;
quit;
它可以工作(如果我没有输入错误),它可以防止代码重复,而且看起来更干净。(后者当然是个人意见的问题)


我想知道您认为这种连接在什么情况下有用。

在SAS中,您不能直接执行该功能。在TSQL中,将使用
with
块执行,但SAS(当前)不支持该操作。这大概看起来像:

with tb0 as (
    select *, min(a) as minA 
     from tableB
     group by id)
select * from tb0 
 inner join
 (select 1 from tb0 where min(something)) tb1
  on tb0.id=tb1.id;

不知道你在问什么。您创建了
表格C
,但您正在从
表格B
中进行选择。那很好。我想使用表tb0来执行连接,而不必再次进行tb0。我会稍微修改一下我的代码,我希望还有其他东西,但是视图是一个非常有趣的替代方案。为了回答你的问题,我有很多变量要创建,我需要这些变量来组成其他变量。这样我就不用再做太多的桌子了。许多感谢您可以在同一步骤中对正在创建的变量执行函数,只要聚合级别相同。例如
创建表测试作为选择日期,销售,价格,销售*价格作为收入,计算的收入/成本作为来源的新VaR@DJJ在SAS中如果你真的必须这样做,那么这绝对是一条路要走。从您的用例示例来看,听起来也不需要这样做,但您必须进一步解释。