Sql 如何使用计算列使用子查询计算同一查询中的另一列

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

我正试图根据以下查询中的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 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,所以我添加了标记。这是否回答了您的问题?或者这是否回答了你的问题?