我们可以使用在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中如果你真的必须这样做,那么这绝对是一条路要走。从您的用例示例来看,听起来也不需要这样做,但您必须进一步解释。