【发布时间】:2017-11-16 03:29:55
【问题描述】:
我有 2 张桌子:
CREATE TABLE [ObIndex](
[idx] [int] IDENTITY(1,1) NOT NULL,
[dtg] [smalldatetime] NOT NULL,
[site] [varchar](6) NOT NULL,
[name] [varchar](32) NOT NULL,
[lat] [float] NOT NULL,
[lon] [float] NOT NULL,
[el] [int] NOT NULL,
CONSTRAINT [PK_SurfaceObIndex] PRIMARY KEY CLUSTERED
(
[icao] ASC,
[dtg] ASC
)
和
CREATE TABLE [ObData](
[idx] [int] NOT NULL,
[label] [varchar](32) NOT NULL,
[value] [varchar](128) NOT NULL,
CONSTRAINT [PK_SurfaceObData] PRIMARY KEY CLUSTERED
(
[idx] ASC,
[label] ASC
)
对于 ObIndex 中的每条记录,ObData 中将存在一个或多个记录,每个记录都包含来自观测的单个参数(请注意,站可能有不同的仪器):
ObIndex (metadata)
1,"2017-11-15 12:00:00","C104","AWS 104",-77.100,-167.100,33
2,"2017-11-15 12:00:00","C105","AWS 105",-77.200,-167.200,55
etc.
ObData (instrument data)
1,"Temperature", -10
1,"DewPoint", -20
1,"WindDirection", 123
1,"WindSpeed", 45
1,"Humidity",66
2,"Temperature", -10
2,"DewPoint", -20
2,"WindDirection", 123
2,"WindSpeed", 45
2,"Pressure",998
etc.
还有与此问题无关的当前站点位置的第三个表。
如果可能,我想使用单个查询从 ObData 表中提取每个 ObIndex 记录的所有值,并将“标签”值转换为列名。此查询适用于单个观察(或 ObIndex 中的记录):
select
Min(Case label When 'Temperature' Then value End) Temperature,
Min(Case label When 'DewPoint' Then value End) DewPoint
Min(Case label When 'WindSpeed' Then value End) WindSpeed,
Min(Case label When 'WindDirection' Then value End) WindDirection,
From SurfaceObData Where SurfaceObData.idx = 138586
谁能帮我完成查询以返回所有观察的数据? 理想情况下,结果如下所示:
idx,site,dtg,WindDirection,WindSpeed,Temperature,Humidity,Dewpoint,Pressure
1,"C104",2017-11-15 12:00:00,123,45,-10,66,-20,
2,"C106",2017-11-15 12:00:00,123,45,-10,,-20,998
(不知道如何把它放在表格格式中......第一次发帖。)
提前致谢!
【问题讨论】:
标签: sql sql-server join pivot