例如,我有很多像[VV1]和[VV2]这样的表:
[TimeStamp],[V1]
2013-12-12 07:00:00.000 3628460,75
2013-12-12 09:00:00.000 3628460,75
2013-12-12 10:00:00.000 3628460,75
2013-12-12 11:00:00.000 3628460,75
2013-12-12 06:00:00.000 3628460,75[TimeStamp],[V2]
2013-12-12 07:00:00.000 3628460,75
2013-12-12 09:00:00.000 3628460,75
2013-12-12 10:00:00.000 3628460,75
2013-12-12 06:00:00.000 3628460,75我想得到一些类似的东西:
2013-12-12 07:00:00.000 3628460,75 3628460,75
2013-12-12 08:00:00.000 NULL 3628460,75
2013-12-12 09:00:00.000 3628460,75 3628460,75
2013-12-12 10:00:00.000 3628460,75 3628460,75
2013-12-12 11:00:00.000 3628460,75 NULL
2013-12-12 06:00:00.000 3628460,75 3628460,75我试着用joins来实现它,我的变种真的很糟糕:
select distinct DATEADD(second, DATEDIFF(second, GETUTCDATE(), GETDATE()), coalesce(VV1.[TimeStamp], VV2.[TimeStamp])) as Date, V1, V2
from vv1
full join vv2
on vv2.TimeStamp = vv1.TimeStamp( DATEDD是UTC到本地时间)
它是这样实现的,因为表计数是动态的,每次当我添加新的表并想要看到新的列时,我可以很容易地编辑select字符串。
但是这个变种很可怕,因为它填充了双倍,并且有更多的列,它变得疯狂,distinct是很难合并的……
现在我在思考理智和快速的实现。怎么做呢?
发布于 2013-12-13 18:54:09
我认为不会有性能更好的解决方案,但下面的查询可能是一种更简洁的方式,特别是在添加新表的情况下:
select [Date]
, MAX([Value1]) as [Value1]
, MAX([Value2]) as [Value2]
from (
select DATEADD(second, DATEDIFF(second, GETUTCDATE(), GETDATE()), VV1.[TimeStamp]) as [Date]
, V1 as [Value1]
, Null as [Value2]
from vv1
UNION ALL
select DATEADD(second, DATEDIFF(second, GETUTCDATE(), GETDATE()), VV2.[TimeStamp]) as [Date]
, Null as [Value1]
, V2 as [Value2]
from vv2 ) subquery
group by subquery.datehttps://stackoverflow.com/questions/20564039
复制相似问题