我是一名控制工程师,对SQL的知识非常有限,但我使用AB FactoryTalk、SQL 2012和ReportBuilder3.0进行了一些报告。数据来自PLC,并将数据记录到三个表中
标记表保存标记名和"TagIndex“以供参考。浮点数表保存所有数字数据,并有一个"TagIndex“,其数字与标记表中的标记名相匹配。与String表相同的概念,包含字符串,并有一个"TagIndex“,它与标签表中的标记名称相匹配。
我正在构建一个表,该表显示整个数据日志快照,其中包括浮点表和字符串表中的一些数据。两者都是相互关联的,因为它们的日期/时间记录匹配。
我需要将标记表与字符串表和浮点数表相关联,并通过日志日期将String table与Float表关联起来。
使用报表生成器中的查询设计器,我有一个具有以下内容的半工作表
SELECT
StringTable.DateAndTime AS [StringTable DateAndTime]
,FloatTable.DateAndTime AS [FloatTable DateAndTime]
,FloatTable.TagIndex AS [FloatTable TagIndex]
,FloatTable.Val AS [FloatTable Val]
,StringTable.Val AS [StringTable Val]
,TagTable.TagIndex AS [TagTable TagIndex]
,TagTable.TagName
,TagTable.StartEnd
,TagTable.TableOrder
,TagTable.Label
,TagTable.Unit
,StringTable.TagIndex AS [StringTable TagIndex]
FROM TagTable
FULL OUTER JOIN FloatTable
ON TagTable.TagIndex = FloatTable.TagIndex
FULL OUTER JOIN StringTable
ON TagTable.TagIndex = StringTable.TagIndex代码工作,但与FloatTable和StringTable没有关系。还将最后两行替换为下面的内容,这是一个有效的查询,但没有给出我需要的内容:
FULL OUTER JOIN StringTable
ON TagTable.TagIndex = StringTable.TagIndex
AND FloatTable.DateAndTime = StringTable.DateAndTime数据在表中使用,列作为TagIndex/TagNames,行是DateAndTime。
如何使DateAndTime正确地加入?
发布于 2017-06-24 06:19:16
在这里,完全外部联接确实是个好主意,但只适用于两个子表。
SELECT
s.DateAndTime AS [StringTable DateAndTime]
,f.DateAndTime AS [FloatTable DateAndTime]
,f.TagIndex AS [FloatTable TagIndex]
,f.Val AS [FloatTable Val]
,s.Val AS [StringTable Val]
,t.TagIndex AS [TagTable TagIndex]
,t.TagName
,t.StartEnd
,t.TableOrder
,t.Label
,t.Unit
,s.TagIndex AS [StringTable TagIndex]
FROM FloatTable f
FULL OUTER JOIN StringTable s ON s.TagIndex = f.TagIndex AND s.DateAndTime = f.DateAndTime
INNER JOIN TagTable t ON t.TagIndex IN (s.TagIndex, f.TagIndex);https://stackoverflow.com/questions/44733204
复制相似问题