创建一个将两列相加的值

问题描述 投票:1回答:3

我正在尝试定义名为End Year的新列,即另一列的计算加上表示年数的数字。由于某些原因,我的脚本无法使用SQL Server 2008中SQL语句下面的摘录识别名为Allocation Year的新列。请注意,Contract Year是在非编辑完整脚本中标识的现有列:

,[Allocation Type] =
CASE 
WHEN left([contract type] ,1)'1' = THEN 'O&M'
ELSE 'N/A'
END
,[Allocation Year] =
CASE
WHEN [Contract Year]='XXXX' THEN '0'
ELSE CAST ([Contract Year] AS INT)
END
,[End Year] =
CASE
WHEN [Allocation Type]='O&M' THEN [Allocation Year] + 6
END
sql sql-server calculated-columns
3个回答
0
投票

列以AS关键字命名(在许多情况下也可以省略),而不是使用=运算符。

SQL Server不允许您引用SELECT子句中的其他列或别名 - 您必须使用子查询:

像这样:

SELECT
    *,
    CASE WHEN [Allocation Type] = 'O&M'
        THEN [Allocation Year Temp] + 6
        ELSE NULL
    END AS [Allocation Year]
FROM
(
    SELECT
        CASE WHEN LEFT( [Contract type], 1 ) = '1'
            THEN 'O&M'
            ELSE 'N/A'
        END AS [Allocation Type],

        CASE WHEN [Contract Year] = 'XXXX' 
            THEN '0'
            ELSE CAST( [Contract Year] AS int )
        END AS [Allocation Year Temp],
        *
    FROM
        ....
)

0
投票

如果要将所有内容放在一个选择查询中,请尝试使用此查询。希望这可以帮助。谢谢。

,[End Year] =
CASE
WHEN left([contract type] ,1)='1' THEN 
  (CASE
    WHEN [Contract Year]='XXXX' THEN 6
   ELSE (CAST ([Contract Year] AS INT) + 6 )
  END)
END

0
投票

您无法在SELECT语句中引用计算列。您将不得不重复计算(或使用像Dai建议的子查询):

,[Allocation Type] =
CASE 
WHEN left([contract type] ,1)='1' THEN 'O&M'
ELSE 'N/A'
END
,[Allocation Year] =
CASE
WHEN [Contract Year]='XXXX' THEN 0
ELSE CAST ([Contract Year] AS INT)
END
,[End Year] =
CASE
WHEN left([contract type] ,1)='1' THEN (CASE
                                        WHEN [Contract Year]='XXXX' THEN 0
                                        ELSE CAST ([Contract Year] AS INT)
                                        END) + 6
END
© www.soinside.com 2019 - 2024. All rights reserved.