【发布时间】:2020-05-12 11:51:30
【问题描述】:
我正在开展一个关于创建 ETL 流程的项目,但遇到了 1 个问题,我需要使用 3 个不同的表将数据插入到维度表中,而没有可以用来连接表的公共键。我试图用 CTE 解决这个问题,但没有用。
地震数据表
城市数据表
国家数据表
**我正在尝试做的事情** 我需要找到发生地震的城市、国家和世界区域,并将结果值存储在不同的表中。 因此,通过使用计算所提供位置之间距离的公式。我从地震表中获取的第一个位置和从城市纬度和经度中获取的第二个位置。
( 6371 * acos( cos( radians(E.Latitude) ) * cos( radians( C.Latitude ) ) * cos( radians( C.Longitude) - radians(E.Longitude) ) + sin( radians(E.Latitude) ) * sin( radians( C.Latitude ) ) ) ) < 100
这里C.Latitude 是城市纬度,E.Latitude 是它发生的纬度。
这是我徒劳的 CTE 方法。
WITH Test_CTE (
Latitude
,Longitude
,City
,Country
,Region
,Place
)
AS (
SELECT E.Latitude
,E.Longitude
,C.City
,C.Country
,Cntry.Region
,Cast(E.place AS VARCHAR(50))
FROM Earthquake AS E
,(
SELECT Latitude
,Longitude
,Country
,City
FROM City
) AS C
,(
SELECT Country
,Region
FROM Country
) AS Cntry
WHERE (6371 * acos(cos(radians(E.Latitude)) * cos(radians(C.Latitude)) * cos(radians(C.Longitude) - radians(E.Longitude)) + sin(radians(E.Latitude)) * sin(radians(C.Latitude)))) < 100
AND Cntry.Country = C.Country
)
SELECT *
FROM Test_CTE
产生这个结果
注意:除 City 以外的列重复次数过多。
我的期望:Earthquake Table 中的每一行只有 1 个最接近的对应城市,City 中的 Country,Country 表中的 Region 和 Earthquake 表中的 Place。
我没有使用没有公共键的表,所以我不知道为什么以及是什么导致了这个问题。 有人能帮我吗?提前致谢
【问题讨论】:
标签: sql-server tsql common-table-expression