2014-05-16 61 views
1

我有一个手工整理到Excel表格中的序列号列表(多年以来)。递归SQL没有索引

当我们生产一件物品时,我们给它一个独特的(当天)序列号并发货。
该项目将被退回,届时我们将翻新它,并申请一个新的序列号。

每次记录旧的串行数据并将新的串行数据记录在每天新增的Excel表单中时,可以返回数百次。

我需要找到所有可能项目的翻新 - >返回历史记录。

所以我已经导入张成MS SQL 2K8:日期,旧序列(X),新系列(Y)

我可以用PHP来labouriously搜索序列X如果找到了,记录下来,使搜索x参数== y并继续前进,直到找不到更多记录。

但我确定有一种方法可以单独使用SQL语句来获取列表。但我难倒 - 任何线索?

+1

我现在没有时间把它写在如何完成它,但[递归公用表表达式](http://technet.microsoft.com/en-us/library/ms186243(v = sql.105).aspx)正是你正在寻找的。 –

+0

它看起来像什么“记录”。我不是100%,因为你在记录什么。您是否想要显示第一个序列号和所有附加序列号的列表? – workabyte

回答

3

有,使用递归CTE。为了一个旧后让所有的“新序列号”:

with cte as (
     select s.oldserial, s.newserial 
     from serials s 
     where oldserial = @x 
     union all 
     select s.oldserial, s.newserial 
     from serials s join 
      cte 
      on s.newserial = cte.oldserial 
    ) 
select * 
from cte; 

为了得到前辈,改变on条件cte.newserial = s.oldserial