这是我第一次发帖到堆栈溢出,我知道之前已经问过类似的问题,所以我提前道歉。但是,无论其他论坛中提供的解决方案如何,我似乎都无法解决这个问题。
我在SQL Server中有两个表,一个包含风暴事件信息,另一个包含县信息。它们都包含相同的county_fips
个数字。这些都不包含主键或外键。
我需要用来自县表的纬度/经度来替换风暴事件信息中的NA。如果没有外国/主要关键关系,这可能吗?
StormEvent
表如下所示:
ID | Lat | Lon | State_FIPS | County_FIPS
------------------------------------------
1 | 33 | -88 | 028 | 087
2 | 31 | -98 | 048 | 225
3 | NA | NA | 017 | 034
4 | 39 | -100| 020 | 063
依旧......
CountyTable
看起来像这样(statefp10,countyfp10 = FIPS; intptlat10,intptlon10 = lat / lon):
StateFP10 | County_FP10 | State_FP10| intptlat10 | intptlon10
--------------------------------------------------------------
1 | 087 | 028 | 33 | -88
2 | 225 | 048 | 31 | -98
3 | 034 | 017 | 45 | -102
等等。
到目前为止,我已尝试使用以下代码调整Lat列,但略有不同:
UPDATE n
SET n.lat= c.intptlat10
FROM StormEvent n
INNER JOIN CountyTable c ON n.County_FIPS= c.CountyFP10
WHERE n.LAT = 'NA'
查询已执行,我告诉x行数受影响,但当我编写一个select语句来检索StormEvent
表的Lats中包含的所有NAs时,它们是还在那儿。
如果有人能指出我正确的方向,我将不胜感激!我再次道歉,如果我以错误的方式解决这个问题,这是我的第一篇文章,我是一名SQL新手。
答案 0 :(得分:2)
假设您实际上并不需要设置数据,但您只想在查询时查看lat / lon数据,那么您应该可以执行以下操作:
select
a.ID,
case a.Lat when 'NA' then b.intptlat10 else a.Lat end as Lat,
case a.Lon when 'NA' then b.intptlon10 else a.Lon end as Lon,
a.State_FIPS,
a.County_FIPS
from StormEvent a
left join CountyTable b
on a.State_FIPS = b.StateFIPS;
答案 1 :(得分:1)
您可能只需要更新JOIN
。我已经创建了一些表变量来测试。
DECLARE @StormEvent TABLE (ID INT, Lat VARCHAR(10), Lon VARCHAR(10),
State_FIPS INT, County_FIPS INT)
INSERT @StormEvent (ID , Lat, Lon, State_FIPS, County_FIPS)
VALUES (1,'33','-88',028,087),
(2,'31','-98',048,225),
(3,'NA','NA',017,034),
(4,'39','-100',020,063)
DECLARE @CountyTable TABLE (StateFP10 INT, County_FP10 INT, State_FP10 INT,
intptlat10 VARCHAR(10), intptlon10 VARCHAR(10))
INSERT @CountyTable
VALUES (1,087,028,'33','-88'),
(2,225,048,'31','-98'),
(3,034,017,'45','-102')
UPDATE n
SET n.lat= c.intptlat10, n.Lon = c.intptlon10
FROM @StormEvent n
INNER JOIN @CountyTable c ON n.State_FIPS= c.State_FP10
WHERE n.LAT = 'NA'
SELECT *
FROM @StormEvent
假设您希望更新两个N/A
值,只需将Lon
列添加到UPDATE
。
SET n.Lat = c.intptlat10, n.Lon = c.intptlon10
结果:
ID Lat Lon State_FIPS County_FIPS
1 33 -88 28 87
2 31 -98 48 225
3 45 -102 17 34
4 39 -100 20 63