2013-04-17 56 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