2014-05-16 57 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