Sql 有没有办法检查JOIN中的几个字段是否相等?

Sql 有没有办法检查JOIN中的几个字段是否相等?,sql,tsql,join,Sql,Tsql,Join,例如: 我有疑问: select coalesce(VV1.[TimeStamp], VV2.[TimeStamp]...) as MyDate, V1, V2, .. VN from VV1 full join VV2 full join VV3 ... full outer join VVN on VV1.TimeStamp = VV2.TimeStamp and VV2.TimeStamp = VV3.TimeStamp ..

例如:

我有疑问:

select coalesce(VV1.[TimeStamp], VV2.[TimeStamp]...) as MyDate, V1, V2, .. VN
    from VV1
    full join VV2
    full join VV3
    ...
    full outer join VVN
    on VV1.TimeStamp = VV2.TimeStamp
    and VV2.TimeStamp = VV3.TimeStamp
    ... 
    and VVN-1.TimeStamp = VVN.TimeStamp

我想将其生成为字符串,但它与部分上的
非常复杂。。。所以

  • 有可能用更好的方式写吗
  • 可能会以某种方式在AlloftheReequal(VV1.TimeStamp,VV2.TimeStamp..vvvn.TimeStamp)上写入
    ?但我怀疑这是否可能:(
  • 也许可以将以前的值存储在temp变量中,然后从中提取?最后一个选项对我来说最真实
SQLFible:

用你的小提琴:

这里有一种不同的方法。不需要额外的连接,只需为每个
时间戳提供一行

SELECT "Timestamp"
     , Max(CASE WHEN PointId = 1 THEN "Value" END) As V1
     , Max(CASE WHEN PointId = 2 THEN "Value" END) As V2
     , Max(CASE WHEN PointId = 3 THEN "Value" END) As V3
     , Max(CASE WHEN PointId = 4 THEN "Value" END) As V4
     , Max(CASE WHEN PointId = 5 THEN "Value" END) As V5
FROM   t1
GROUP
    BY "Timestamp"
请尽可能避免使用动态SQL

使用小提琴:

这里有一种不同的方法。不需要额外的连接,只需为每个
时间戳提供一行

SELECT "Timestamp"
     , Max(CASE WHEN PointId = 1 THEN "Value" END) As V1
     , Max(CASE WHEN PointId = 2 THEN "Value" END) As V2
     , Max(CASE WHEN PointId = 3 THEN "Value" END) As V3
     , Max(CASE WHEN PointId = 4 THEN "Value" END) As V4
     , Max(CASE WHEN PointId = 5 THEN "Value" END) As V5
FROM   t1
GROUP
    BY "Timestamp"
请尽可能避免使用动态SQL

使用小提琴:

这里有一种不同的方法。不需要额外的连接,只需为每个
时间戳提供一行

SELECT "Timestamp"
     , Max(CASE WHEN PointId = 1 THEN "Value" END) As V1
     , Max(CASE WHEN PointId = 2 THEN "Value" END) As V2
     , Max(CASE WHEN PointId = 3 THEN "Value" END) As V3
     , Max(CASE WHEN PointId = 4 THEN "Value" END) As V4
     , Max(CASE WHEN PointId = 5 THEN "Value" END) As V5
FROM   t1
GROUP
    BY "Timestamp"
请尽可能避免使用动态SQL

使用小提琴:

这里有一种不同的方法。不需要额外的连接,只需为每个
时间戳提供一行

SELECT "Timestamp"
     , Max(CASE WHEN PointId = 1 THEN "Value" END) As V1
     , Max(CASE WHEN PointId = 2 THEN "Value" END) As V2
     , Max(CASE WHEN PointId = 3 THEN "Value" END) As V3
     , Max(CASE WHEN PointId = 4 THEN "Value" END) As V4
     , Max(CASE WHEN PointId = 5 THEN "Value" END) As V5
FROM   t1
GROUP
    BY "Timestamp"


请尽可能避免使用动态SQL

在大多数实际应用程序中,完全外部联接的用例很少且相距甚远。如果您看到一个,您的脑海中会响起警钟。不要轻率地使用它们。为什么
完全外部联接而不是
内部联接
?内部联接不返回任何数据…它们不是交叉的,而是
完全联接将返回相同的数据。“我想将其生成为字符串,但…”是否要构建动态查询?有一个SQL Server要求添加自然连接和使用-这两个功能都基于连接两侧出现的相同列名工作,您的用例建议是这样的-但尚未实现。在大多数实际应用中,完全外部连接的用例很少且相距甚远-世界应用程序。如果你看到一个应用程序,你的头脑中会响起警钟。不要轻率地使用它们。为什么
完全外部
连接而不是
内部
?内部不返回任何数据…它们没有交叉,但是
完全连接
将返回相同的数据。“我想将其生成为字符串,但…”是否要构建动态查询?有一个SQL Server要求添加自然连接和使用-这两个功能都基于连接两侧出现的相同列名工作,您的用例建议是这样的-但尚未实现。在大多数实际应用中,完全外部连接的用例很少且相距甚远-世界应用程序。如果你看到一个应用程序,你的头脑中会响起警钟。不要轻率地使用它们。为什么
完全外部
连接而不是
内部
?内部不返回任何数据…它们没有交叉,但是
完全连接
将返回相同的数据。“我想将其生成为字符串,但…”是否要构建动态查询?有一个SQL Server要求添加自然连接和使用-这两个功能都基于连接两侧出现的相同列名工作,您的用例建议是这样的-但尚未实现。在大多数实际应用中,完全外部连接的用例很少且相距甚远-世界应用程序。如果你看到一个应用程序,你的头脑中会响起警钟。不要轻率地使用它们。为什么
完全外部
连接而不是
内部
?内部不返回任何数据…它们没有交叉,但是
完全连接
将返回相同的数据。“我想将其生成为字符串,但…”是否要构建动态查询?有一个SQL Server要求添加自然联接和使用-这两个功能都基于联接两侧出现的相同列名工作,您的用例表明是这样-但它尚未实现。老实说,它仍然是错误的,因为当有不止一个表:)@Heather您最初的问题没有说明这一事实,因此提供的解决方案不能满足这一点。您似乎正在滥用动态SQL,这通常是您的设计/解决方案中存在缺陷的标志。也许你需要回到绘图板上?我已经成功地完成了:)以复杂的方式使用完全联接,但它按我所希望的那样工作。老实说,它仍然是错误的,因为当有多个表时它会引起麻烦:)@Heather你最初的问题没有说明这个事实,因此,提供的解决方案不能满足这一要求。您似乎正在滥用动态SQL,这通常是您的设计/解决方案中存在缺陷的标志。也许你需要回到绘图板上?我已经成功地完成了:)以复杂的方式使用完全联接,但它按我所希望的那样工作。老实说,它仍然是错误的,因为当有多个表时它会引起麻烦:)@Heather你最初的问题没有说明这个事实,因此,提供的解决方案不能满足这一要求。您似乎正在滥用动态SQL,这通常是您的设计/解决方案中存在缺陷的标志。也许你需要回到绘图板上?我已经成功地完成了:)以复杂的方式使用完全联接,但它按我所希望的那样工作。老实说,它仍然是错误的,因为当有多个表时它会引起麻烦:)@Heather你最初的问题没有说明这个事实,因此,提供的解决方案不能满足这一要求。您似乎正在滥用动态SQL,这通常是您的设计/解决方案中存在缺陷的标志。也许你需要回到绘图板上?我已经设法完成了:)以复杂的方式使用完全连接,但它按照我的要求工作。