如何从一个表中获取所需的视图结果

时间:2016-12-04 17:32:22

标签: sql sql-server view

我有一个表(mytable),如下例所示,包含任何集合的项目:

CollCode | ItemCode
---------+---------
   101   |   201
   101   |   202
   101   |   203
   202   |   204
   202   |   205

我想从这张表中找回一个像这样的结果:

CollCode | ItemCode
---------+----------
   101   |   201
   101   |   202
   101   |   203
   101   |   204
   101   |   205
   202   |   204
   202   |   205

这意味着我想要所有级别的集合中的所有项目而不仅仅是第一级别。

1 个答案:

答案 0 :(得分:3)

您正在寻找递归CTE。试试这个:

with t(CollCode, ItemCode) as (
       values (101, 201), (101, 202), (101, 203),
              (202, 204), (202, 205)
      ),
      cte as (
       select t.CollCode, t.ItemCode
       from t
       union all
       select cte.CollCode, t.ItemCode
       from cte join
            t
            on t.collCode = cte.ItemCode
      )
select *
from cte
order by collCode;

(显然,CTE t只是提供样本数据来证明这是有效的。)

编辑:

删除中间结果:

select *
from cte
where not exists (select 1 from t t2 where t2.collCode = cte.ItemCode)
order by collCode;