簡體   English   中英

如何在同一 select 語句中的另一列中重用列別名?

[英]How to reuse column alias in another column within same select statement?

select pd.id
       ,[value 1] = Case
                    ----
                    End
       ,[value 2] = Case when [value 1] in ('test1', 'test2') Then 0
                    else [value 1] End

當我嘗試在值 2 中使用值 1 時,我得到的列無效。是否有可能使用計算的 [值 1] 在 [值 2] 中使用

我目前的解決方案是為值 1 創建一個單獨的 sp 或視圖,但這不是我想要做的。

您可以使用 select 語句 select [值 1] 然后將外部查詢寫入 select [值 1] 和 [值 2]

SELECT  [value 1]      ,[value 2] = Case when [value 1] in ('test1', 'test2') Then 0
                    else [value 1] End 
FROM
(
select pd.id
       ,[value 1] = Case
                    ----
                    End
FROM TABLENAME
)T

或者您可以在 [value 2] 的 case 語句中重復 [value 1] 的 case 語句

select pd.id
       ,[value 1] = Case
                    ----
                    End
       ,[value 2] = Case when ( Case
                    ----
                    End [value 1]) in ('test1', 'test2') Then 0
                    else ( Case
                    ----
                    End [value 1]) End

在 SQL 服務器中,您可以使用APPLYFROM子句中定義列別名——我認為這是一個好地方:

select pd.id v.value_1,
       (Case when value_1 in ('test1', 'test2') Then '0'
             else value_1
        End) as value_2
from pd cross apply
     (values ( case . . . )
     ) v(value_1);

筆記:

  • 不要使用需要轉義的標識符名稱,因此使用value_1而不是value 1
  • value_1似乎是字符串。 value_2case表達式應該返回一個字符串,所以'0'而不是0
  • 我在表達式之后使用as定義表別名。 這是 SQL 標准,但使用=本身並沒有錯,這是 SQL 服務器特定語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM