Sql 如何使用计算列使用子查询计算同一查询中的另一列
我正试图根据以下查询中的NLength和NSpeedLimit字段添加一个新的计算字段(TravelTime)Sql 如何使用计算列使用子查询计算同一查询中的另一列,sql,sql-server,tsql,spatial-query,Sql,Sql Server,Tsql,Spatial Query,我正试图根据以下查询中的NLength和NSpeedLimit字段添加一个新的计算字段(TravelTime) SELECT sc.OBJECTID, sn.Name, case when hn.side = 'Right Side' then '' else sc.LCity end as LCity, case when hn.side = 'Left
SELECT
sc.OBJECTID,
sn.Name,
case when hn.side = 'Right Side' then ''
else sc.LCity
end as LCity,
case when hn.side = 'Left Side' then ''
else sc.RCity
end as RCity,
case when hn.side = 'Right Side' then ''
else sc.LZip
end as LZip,
case when hn.side = 'Left Side' then ''
else sc.RZip
end as RZip,
sc.SHAPE.STLength() AS NLength,
ISNULL(sc.SpeedLimit,1) AS NSpeedLimit
FROM STREETNAME AS sn
INNER JOIN
STREETHASSTREETNAME AS hn ON
sn.GlobalID = hn.GlobalID AND
hn.Role = 'Primary'
INNER JOIN STREETCENTERLINE AS sc ON
hn.GlobalID = sc.GlobalID
新的计算字段是TravelTime=NLength/(NSpeedLimit*88)
但是我不能在select语句中添加
NLength/(NSpeedLimit*88)作为TravelTime
。我知道我需要执行子查询,但我不知道它应该去哪里。您可以使用apply
在FROM
子句中添加列:
SELECT . . .
v.NLength, v.NSpeedLimit,
(v.NLength / (v.NSpeedLimit*88)) as TravelTime
FROM STREETNAME sn JOIN
STREETHASSTREETNAME hn
ON sn.GlobalID = hn.GlobalID AND
hn.Role = 'Primary' JOIN
STREETCENTERLINE sc
ON hn.GlobalID = sc.GlobalID CROSS APPLY
(VALUES (sc.SHAPE.STLength(), COALESCE(sc.SpeedLimit, 1)
) v(NLength, NSpeedLimit)
您可以使用临时表、派生表或公共表表达式(CTE)来获得结果。简单的方法是从表中导出,因为您不需要更多的编码
SELECT A.*
, A.NLength/(A.NSpeedLimit * 88) as [TravelTime]
FROM
(
SELECT
sc.OBJECTID,
sn.Name,
case when hn.side = 'Right Side' then ''
else sc.LCity
end as LCity,
case when hn.side = 'Left Side' then ''
else sc.RCity
end as RCity,
case when hn.side = 'Right Side' then ''
else sc.LZip
end as LZip,
case when hn.side = 'Left Side' then ''
else sc.RZip
end as RZip,
sc.SHAPE.STLength() AS NLength,
ISNULL(sc.SpeedLimit,1) AS NSpeedLimit
FROM STREETNAME AS sn
INNER JOIN
STREETHASSTREETNAME AS hn ON
sn.GlobalID = hn.GlobalID AND
hn.Role = 'Primary'
INNER JOIN STREETCENTERLINE AS sc ON
hn.GlobalID = sc.GlobalID
) AS A
假设您正在使用SQL Server,所以我添加了标记。这是否回答了您的问题?或者这是否回答了你的问题?