2014-02-12 48 views
2

我有以下形式SQL查詢循環在給定的數據

ID    Description 
-------  ------------------------ 
83633  Reserves - 1 
83634  Reserves - 2 
83635  Reserves - Total 
83636  X Reserves 
83637  E Reserves 
83638  Oil 
83639  NGL 
83640  NB Gas 
83641  NU Gas 
102195  Proved Reserves - D 
102196  Proved Reserves - U 
102197  Proved Reserves - Total 
102198  Probable Reserves - Gross 
102199  Proved Reserves - G1 
102200  Proved Reserves - G2 
102201  Proved Reserves - G3 
102202  Proved Reserves - G4 
102203  Proved Reserves - N1 
102204  Proved Reserves - N2 
102205  Proved Reserves - N3 
102206  Proved Reserves - N4 
102207  Probable Reserves - G1 
102208  Probable Reserves - G2 
102209  Probable Reserves - G3 
102210  Probable Reserves - G4 
102211  Oil 
102212  NGL 
102213  CNG 
102214  Natural Gas 

的數據我想編寫一個查詢只有一個選擇標識的該增量。例如,如果我給首發ID=83633那麼該查詢應該返回以下數據

ID    Description 
-------  ------------------------ 
83633  Reserves - 1 
83634  Reserves - 2 
83635  Reserves - Total 
83636  X Reserves 
83637  E Reserves 
83638  Oil 
83639  NGL 
83640  NB Gas 
83641  NU Gas 

在遇到ID = 102195查詢必須停止執行。先謝謝您的幫助!!

+0

,其中83633和102195秩序之間的ID通過ID 你在尋找什麼有什麼關係?之間的任何id被刪除,比如說83634 – KumarHarsh

回答

2

請嘗試:

SELECT 
    ID, 
    Description 
FROM(
    SELECT 
     ID+1-ROW_NUMBER() OVER (ORDER BY ID) Col, 
     * 
    FROM YourTable 
    WHERE ID>=83633 
)x WHERE Col=83633 
+0

很好的答案。但是,您在內部選擇中缺少WHERE ID> = 83633,因此您不會受到任何潛在較低ID的阻礙。此外,您可能需要使用*的限定符(即YourTable。*)。至少在Oracle中這是必需的。不瞭解SQL-Server。 –

+0

是@ThorstenKettner,你是對的!謝謝。在oracle中,這個查詢不起作用,必須添加列名而不是*或表的別名。 – TechDo

0

您可以使用 '而' 循環如下:

DECLARE @Temp INT 

SELECT @Temp =83633 
WHILE(@Temp <=102195) 
BEGIN 
     PRINT CHAR(@Temp) 
     SELECT @Temp = @Temp + 1 
END 
GO 
+0

下一個項目可能不總是'102195'。如果我輸入起始ID爲'ID = 102195' ...那麼上述查詢將不起作用。 – SohamC

+0

首先從第一個表中獲取計數(或最大ID)並將其存儲在臨時變量中,然後用它代替102195. – BAdmin

+0

檢查此鏈接, http://www.sqlusa.com/bestpractices/whilelooptablevariable/ – BAdmin