2011-12-14 63 views
3

我有一个选择查询与几十个字段。 “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 

(我知道,一个选择是将数据转储到一个临时表,然后更新该临时表,但那种失败的概念'简化')的

回答

4

做这样的:

;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 
+0

它的工作原理!并不像我期望的那么简单(它基本上将1 Select语句拆分为2),但它有它自己的一些优点。 – PowerUser 2011-12-14 22:17:39

+2

不知道它是唯一的解决方案吗? – 2013-10-03 09:36:18

2

@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 
相关问题