如何在同一查询中的另一个字段中使用计算字段

4
我有一个选择查询,其中包含几十个字段。"FieldA"是一个有大约10行的Case语句。现在我需要创建一个"FieldB",它使用相同的Case语句加上一个常数。
就我目前对sql-server的了解,我需要重复两次那个Case语句(一次用于FieldA,一次用于FieldB)。为了整理我的代码,如何在计算FieldB时使用FieldA?
理想情况下,我的代码应该像这样:
Select
    Case ...
        When ... then ...
        When ... then ...
        When ... then ...
    End                     as FieldA,
    FieldA + 1              as FieldB
From TblSource

我知道一种方法是将数据转储到临时表中,然后更新该临时表。但这有点违背“简化”的概念。

2个回答

6
这样做:
;WITH YourCTE AS
(
Select
    Case ...
        When ... then ...
        When ... then ...
        When ... then ...
    End                     as FieldA
From TblSource
)
SELECT FieldA, FieldA + 1 AS FieldB, FieldA + 2 AS FieldC ....
FROM YourCTE

它能够工作!虽然不像我希望的那样简单(基本上将一个Select语句拆分为两个),但它有一些自己的优点。 - PowerUser
2
想知道这是否是唯一的解决方案? - Johnny_D

3

@Johnny_D

总有可能使用以下方式:

Select tbl.*,tbl.FieldA+1 as FieldB, tbl.FieldA+2 as FieldC from
(
Select
    Case ...
        When ... then ...
        When ... then ...
        When ... then ...
    End as FieldA
From TblSource
) as tbl

那也可以。而且由于它不使用(相对较隐晦的); With命令,解释起来更容易。 - PowerUser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接