【发布时间】:2011-03-13 20:35:35
【问题描述】:
我的问题:
我有一个带有Channel <int> 和Value <float> 列的表,还有一个时间戳和其他几个带有附加数据的列。 Channel 是 1 或 2,并且有 1 或 2 行除了通道和值之外的所有内容都相同。
我想做的是将此数据选择到一个新表单中,其中两个通道显示为列。我试图用GROUP BY 做一些事情,但我不知道如何根据同一行上的通道将值放入正确的列中。
示例:
对于那些宁愿查看我拥有的数据和我想要的数据并从那里弄清楚的人来说,就是这样。我有什么:
Channel Value Timestamp OtherStuff
1 0.2394 2010-07-09 13:00:00 'some other stuff'
2 1.2348 2010-07-09 13:00:00 'some other stuff'
1 24.2348 2010-07-09 12:58:00 'some other stuff'
2 16.3728 2010-07-09 12:58:00 'some other stuff'
1 12.284 2010-07-09 13:00:00 'unrelated things'
2 9.6147 2010-07-09 13:00:00 'unrelated things'
我想要什么:
Value1 Value2 Timestamp OtherStuff
0.2394 1.2348 2010-07-09 13:00:00 'some other stuff'
24.2348 16.3728 2010-07-09 12:58:00 'some other stuff'
12.284 9.6147 2010-07-09 13:00:00 'unrelated things'
更新以回应 cmets 中出现的一些问题,以及一些后续问题/澄清:
是的,是
Timestamp和OtherStuff的组合将这两行链接在一起。 (OtherStuff实际上不止一列,但为了简洁起见,我进行了简化。)还有一些其他列不一定相等,但应该保持原样。有问题的表已经从两个表连接,其中
Value、Channel和Timestamp来自其中一个,其余的(总共 7 列,其中 4对于“链接”行总是相等的,而其他三个大多不是)。有几个使用INNER JOIN的建议 - 如果我已经将东西连接在一起,这些是否仍然有效(即使我没有myTable来连接自己)?-
很多行具有相同的时间戳,所以我需要来自我要加入的两个表的信息来确定哪些行要链接在一起。
我有很多数据。输入来自遍布全国的测量设备,其中大多数(如果不是全部)每 2 分钟上传一次测量结果(最多 4 个通道)。现在我们有大约 1000 台设备在线,这意味着平均每分钟增加大约 1000 行。我需要考虑至少 3 小时(最好是 6 小时)的值,这意味着表中包含通道、值和时间戳的 180 000 到 360 000 行。
【问题讨论】:
-
什么链接了 2 行?时间戳和其他东西?
-
刚刚问了一个与此相反的问题:)!
标签: sql sql-server-2005 tsql group-by