2014-07-22 69 views
0

我有一個表格,我必須從中提取一些數據。循環遍歷列,名稱幾乎相同

有一些列是相同的,但除了一個名稱的最後一個過去,這是一個數字。我解釋一下:

我的startDate和結束日期多次做出這樣:

startDate1 | endDate1 |startDate2 | endDate2 |startDate3 | endDate3 

等等

而且,我想提取數據,逐個 所以startDate1和ENDDATE1第一,然後startDate2和ENDDATE2 ...

所以我做了這樣的事情:

FOR i IN 1..10 LOOP 
     IF reg.startDate ||i is not null THEN 
--TODO 
     END IF; 
END LOOP; 

Reg是一個遊標上的一行。

當然,這不起作用,因爲我們不能像這樣連接(我忽略了一條語句)。

我想如果一個循環,這將是一樣的,如果我這樣做:

 IF reg.startDate1 is not null THEN 
--TODO 
     END IF; 

     IF reg.startDate2 is not null THEN 
--TODO 
     END IF;   
     IF reg.startDate3 is not null THEN 
--TODO 
     END IF; 

所以,像這樣:

FOR i IN 1..10 LOOP 
     IF reg.startDate||i is not null THEN 
--TODO 
     END IF; 
END LOOP; 

所以我得到這個數據,在不同的列:

startDate1 | endDate1 |startDate2 | endDate2 |startDate3 | endDate3 

18/07/2013 | 19/07/2013 | 18/08/2013 | 19/08/2013 | 18/09/2013 | 19/09/2013 

我想是這樣的:

FOR i IN 1..10 LOOP 
     IF reg.startDate ||i is not null THEN 
insert into table (date) values (reg.endDate |i); 
     END IF; 
END LOOP; 

聽到了,我會插入19/07/2013,19/08/2013,19/09/2013。

我真的不知道那裏有什麼不清楚。

這是可能做到這一點,或沒有級聯?

問題標題可能是錯誤的,但我不知道如何以一種標題以其他方式提問。

+0

定義 「是不行的,因爲我們不能連接這樣的」。另外,添加一些示例輸入數據加上預期的輸出將會有很大的幫助。 –

+0

@FrankSchmitt好吧,我只想使用由startDate開始的'reg.startDate || i' foreach列來獲取數據。由於循環,我必須避免多if條款。我在做什麼不會影響循環。 –

+0

*請*添加樣品輸入+預期輸出。完全不清楚您是否有包含所有連接日期值或完全不同的輸入字符串。 –

回答

0

使用union

Select startDate1, endDate1 FROM YOURTable 
UNION 
Select startDate2, endDate2 FROM YOURTable 
UNION 
Select startDate3, endDate3 FROM YOURTable 

...; 
+0

我的數據已經註冊。爲什麼我應該重做一個選擇查詢? –

+0

@Zaphod你應該重做一個選擇查詢,因爲你想讓它工作。您正試圖使關係語言(SQL)與不正常的規範化數據一起工作,因此您應該期望查詢不會很好,也不能很好地工作。 (「工作良好」是指將來維護代碼和潛在的糟糕表現,而不是錯誤的結果。) – user2338816

+0

@ user2338816我不明白你的觀點。我查詢了一個遊標「SELECT id,name,startDate1,startDate2,startDate3」。所以我已經獲得了所有註冊的數據。問題是,我怎樣才能避免編寫一段代碼foreach startDate。它只會被使用一次,數據庫不會改變。 –