2011-12-14 75 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 
相關問題