首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Declare value作为表

使用Declare value作为表
EN

Stack Overflow用户
提问于 2019-07-12 21:03:22
回答 2查看 69关注 0票数 1

我目前正在使用以下命令创建一个动态的表

代码语言:javascript
复制
DECLARE @startnum INT=1000
DECLARE @endnum INT=1004
;
WITH gen AS (
    SELECT @startnum AS num
    UNION ALL
    SELECT num+1 FROM gen WHERE num+1<=@endnum
)
SELECT * FROM gen
option (maxrecursion 0)

我想知道是否有一种方法可以在子查询中使用这个表进行连接。例如,我如何用上表替换下面代码中的a2。

代码语言:javascript
复制
select a1.*, a2.*
from
(select 
      1000 as v1
union all
select
      1001 as v1
union all
select
      1003 as v1)a1
left join
(select 
      1000 as v2
union all
select
      1001 as v2
union all
select
      1003 as v2
union all 
select
      1004 as v2)a2
    ON a1.v1=a2.v2

提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2019-07-12 21:12:03

尝试如下所示,只需添加另一个cte并使用join

代码语言:javascript
复制
DECLARE @startnum INT=1000
DECLARE @endnum INT=1004
;
WITH gen AS (
    SELECT @startnum AS num
    UNION ALL
    SELECT num+1 FROM gen WHERE num+1<=@endnum
),cte as
(
SELECT * FROM gen

) , cte1 as
(
select a1.* from
(select 
      1000 as v1
union all
select
      1001 as v1
union all
select
      1003 as v1
      )a1

) select cte.*,cte1.* from cte join cte1 on cte.num=cte1.v1
票数 0
EN

Stack Overflow用户

发布于 2019-07-12 21:16:41

使用CTE:

代码语言:javascript
复制
WITH gen AS (
      SELECT @startnum AS num
      UNION ALL
      SELECT num + 1
      FROM gen
      WHERE num + 1 <= @endnum
     )
SELECT
FROM gen JOIN
     a1
     ON a1.v1 = gen.num
OPTION (MAXRECURSION 0);

唯一真正的诀窍是,OPTION需要位于整个查询的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57007585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档