【发布时间】:2018-05-25 05:13:24
【问题描述】:
这个问题可能看起来很笼统,但它相当复杂。
让我们从软件的基础开始:
MS Access 2016
MS SQL 版本。 17.7
数据工厂 17.1
DAQFactory 是一款 SCADA 软件,我用它来测量和存储来自多个温度传感器的数据。我使用“导出集”将传感器数据导出到我的 MSSQL 数据库。我每分钟对传感器数据进行一次采样,生成 1 行传感器数据。我已经设置它为每个样本创建一个新表(因为我只需要采样 10 次/从 1 到 10 分钟,这样我就不需要一直更改我的表的名称)。
我有 6 个温度传感器,DAQFactory 以如下格式导出:
MS SQL 数据库只是我的数据从 DAQFactory 到 MS Access 的载体/渠道,因此我对数据库没有任何问题。
这是一个学校项目,我无法应付。我正在为其制作软件包的客户希望在包含其他类型数据的报告中收集他的数据。因此我需要把传感器数据变成这样的形式:
我使用 MS Access 创建报告并从我的数据库中收集数据。我已经尝试了几种类型的查询,但我无法让它像我想要的那样工作。
问题是数据库中的表和报表中的表具有相反的行和列位置,我无法在 Access 中的查询中切换它(也称为转置)。
我查看了其中一些解决方案:
https://access-programmers.co.uk/forums/showthread.php?t=169794
converting column names to use as row fields in Access
Access - transpose some column data into row records
加入函数
PIVOT 函数
但我无法让它工作。
导出集:
我所有的导出集都包含相同的列:
[时代],
[T_01],
[T_02],
[T_03],
[T_04],
[T_05],
[T_06]
导出集被称为:
dbo.Temp_1min
dbo.Temp_2min
dbo.Temp_3min
dbo.Temp_4min
以此类推,最多 10 个。
将其导入Access时,[TheTime]成为主键,并且所有记录的样本都记录在完全相同的秒内,因此这自然是表的ID。
这是我用来显示数据的代码。我正在使用“总计:最后一个”,因此我表中显示的唯一内容是每个表和传感器的最后一个值。对不起,代码是挪威语格式,但唯一的区别是“SisteAv”,意思是“LastOf”,例如“Totals: Last”函数。
从“dbo_Temp_1min”表中获取最后一个值的代码,这个查询称为“Temp_Samples1”:
SELECT Last(dbo_Temp_1min.TheTime) AS SisteAvTheTime, Last(dbo_Temp_1min.T_01) AS SisteAvT_01, Last(dbo_Temp_1min.T_02) AS SisteAvT_02, Last(dbo_Temp_1min.T_03) AS SisteAvT_03, Last(dbo_Temp_1min.T_04) AS SisteAvT_04, Last(dbo_Temp_1min.T_05) AS SisteAvT_05, Last(dbo_Temp_1min.T_06) AS SisteAvT_06
FROM dbo_Temp_1min;
将多个表合二为一的代码:
SELECT [SisteAvTheTime], [SisteAvT_01], [SisteAvT_02], [SisteAvT_03], [SisteAvT_04], [SisteAvT_05], [SisteAvT_06]
FROM Temp_Samples1
UNION
SELECT [SisteAvTheTime], [SisteAvT_01], [SisteAvT_02], [SisteAvT_03], [SisteAvT_04], [SisteAvT_05], [SisteAvT_06]
FROM Temp_Samples2;
这是我得到的当前结果,列和行与我需要的相反:
澄清我需要什么:
1)第一列列出所有温度传感器的名称(T_01、T_02、T_03等)。
2) 第二列列出表 1 中最后一行传感器数据 (dbo.Temp_1min)。
3)第三列列出表2中最后一行传感器数据(dbo.Temp_2min)
4) 第四列列出表 3 中最后一行传感器数据 (dbo.Temp_3min)
等等……
“时间”列与最终结果无关,应该隐藏,因为时间取决于表格上的名称(1 分钟、2 分钟、3 分钟等)
根据请求,MS SQL 数据库中包含 [dbo.Temp_1min] 的数据:
TheTime T_01 T_02 T_03 T_04 T_05 T_06
----------------------- ------------- ------------- ------------- ------------- ------------- -------------
2018-05-24 15:18:37.000 -0,080911 -0,051013 0,090363 0,034291 -0,096702 -0,016438
2018-05-25 15:04:22.010 0,095227 0,021559 -0,099226 -0,003178 0,099815 -0,015269
2018-05-25 15:04:23.003 0,095226 0,021562 -0,099226 -0,003181 0,099815 -0,015265
2018-05-25 20:06:17.000 0,061521 0,072766 -0,075043 -0,058863 0,085937 0,042978
2018-05-25 20:12:47.000 60,50084 73,64336 -74,18618 -59,89857 85,27211 44,13688
2018-05-25 20:12:47.000 60,50084 73,66345 -74,16626 -59,92236 85,25659 44,16353
2018-05-25 20:06:17.000 0,061521 0,072787 -0,075024 -0,058887 0,085922 0,043005
2018-05-25 20:10:40.003 60,83407 73,37933 -74,46661 -59,5624 85,49031 43,7604
2018-05-25 20:10:40.003 60,83407 73,37933 -74,44677 -59,58627 85,47488 43,78712
2018-05-25 20:23:07.003 58,85883 75,03191 -72,77819 -61,54791 84,16943 45,98995
(受影响的 10 行)
【问题讨论】:
-
我一头雾水,第一张图不是原始数据,不是想要的输出吗?将样本原始数据发布为表格,而不是图像。为想要的结果做同样的事情。
-
我不知道如何发布表格,但我已经更新了我的问题以包含原始数据,这些原始数据是从 MS SQL 以“结果到文本 (Ctrl + T)”格式复制的。如果您想要其他格式,请说明我如何提供。