2013-04-17 99 views
0

我有一個4列的表。房屋號,日期,時間和溫度。對於使用光標的SQL Server中的每個循環

我已經設法在單獨的表格中獲得不同的HouseNos。現在我想插入所有房屋號的所有日期。


來自表的示例數據。有像這樣幾百萬行。

HouseNo Date Time Temp 
102 1/1/2010 10:00 67 
102 2/1/2010 10:00 73 
102 3/1/2010 10:00 75 
103 1/1/2010 10:00 69 
103 2/1/2010 10:00 63 
104 1/1/2010 10:00 71 
104 2/1/2010 10:00 12 

期望輸出是

表1

102 1/1/2010 
102 2/1/2010 
102 3/1/2010 

表2

103 1/1/2010 
103 2/1/2010 

表3

104 1/1/2010 
104 2/1/2010 

然後,我希望能夠循環遍歷表中的每一行,以便對溫度場執行一些操作。

+6

你想執行什麼操作?也許有可能使用基於集合的操作,而不是慢的循環。順便說一句,爲什麼你需要三個不同的桌子爲你的三個房子? –

+2

一個壞主意=根據列值在不同的表中拆分數據。另一個不好的想法=循環執行列上的操作。兩者都可以輕鬆避免。 –

+0

@NenadZivkovic:循環是一個壞主意。我知道。但是有沒有其他的選擇。如果有的話,我很樂意收到。 僅臨時分割數據。那些表格將被刪除。將它們視爲視圖而不是實際表格。 – SarangArd

回答

-1

這樣的事情?

CREATE TABLE new_table 
    AS (SELECT * FROM old_table); 

你也可以把一些WHERE部分和選擇

+0

我真的沒有得到你的代碼。它有什麼作用?? – SarangArd

+0

該代碼在SQL Server中無效。在SQL Server中,您將使用'SELECT * INTO NewTable FROM OldTable'在Oracle中,該代碼將從舊錶中的數據創建一個新表格 –

+0

yeah @ElectricLlama是對的,但我只是問是否你想要:P。 –

0

如果你每天一個ON/OFF對和OFF始終是之前,這可以讓你的時間。

SELECT 
HouseNo, 
Date, 
DATEDIFF(s, 
    MIN(CASE WHEN Relay='OFF' THEN Time ELSE NULL END), 
    MIN(CASE WHEN Relay='ON' THEN Time ELSE NULL END) 
) As OffDuration 
FROM YourTable 
GROUP BY HouseNo, Date 

但是任何正常的現實生活數據集都會有多個ON/OFF對。你能提供更多細節嗎?

+0

不是。事實並非如此。我提出的這些數據只是一個例子。你每20秒鐘有一個記錄。你有一個額外的領域,稱爲中繼。 我想知道在某一天中繼電器關閉的位置。多長時間。 – SarangArd

+0

我猜一天中可以打開和關閉多次繼電器嗎?你想要捕捉外部的ON/OFF還是想要計算所有內部ON/OFF對的總和?請在問題中說明確切的要求,並且您會得到一個很好的答案(可能需要也可能不需要遊標,但可能不需要將數據拆分爲單獨的表格) –

+0

我已將繼電器關閉和打開多次一天內。 我希望僅當繼電器關閉時才能捕獲數據。一分鐘或一整天。所有在一天中的繼電器關閉的行。行可能不連續。 – SarangArd