我想實現這樣的事情:再利用化名場SQL SELECT語句
SELECT
(CASE WHEN ...) AS FieldA,
FieldA + 20 AS FieldB
FROM Tbl
假設由「...」我已經更換了一個漫長而複雜CASE聲明, 我不想在選擇FieldB
時重複,而是使用別名FieldA
代替。
請注意,這將返回多行,因此SELECT
聲明之外的DECLARE
/SET
對我而言並不好。
我想實現這樣的事情:再利用化名場SQL SELECT語句
SELECT
(CASE WHEN ...) AS FieldA,
FieldA + 20 AS FieldB
FROM Tbl
假設由「...」我已經更換了一個漫長而複雜CASE聲明, 我不想在選擇FieldB
時重複,而是使用別名FieldA
代替。
請注意,這將返回多行,因此SELECT
聲明之外的DECLARE
/SET
對我而言並不好。
一個workaroud是使用一個子查詢:
SELECT
FieldA,
FieldA + 20 AS FieldB
FROM (
SELECT
(CASE WHEN ...) AS FieldA
FROM Tbl
) t
爲了提高可讀性,你也可以使用一個CTE
:
WITH t AS (
SELECT
(CASE WHEN ...) AS FieldA
FROM Tbl
)
SELECT
FieldA,
FieldA + 20 AS FieldB
FROM
t
當我有複雜的邏輯來計算來自表中其他列值的「虛擬」列值我通常會創建原始表的單表視圖,其中還包含所有原始列和計算值。然後我對視圖做其他SELECT。這允許我:
命名我的計算列。
將計算的邏輯保存在一個地方,而不是通過應用程序中的各種查詢分散。
你知道這是否對性能更好? – Fractaliste 2014-05-13 12:29:14
除非*您使用提供物化視圖的引擎,並且將其創建爲物化視圖,否則性能*不會產生任何影響,在這種情況下,您將降低寫入性能,但會提高查詢性能。 – 2014-05-13 14:42:16
或者可能是CTE以增強可讀性。 – JohnFx 2010-03-15 14:28:54
@JohnFx:好點,延長我的答案。 – 2010-03-15 14:43:32
我個人認爲派生表更容易閱讀,但那只是我。 – HLGEM 2010-03-15 21:19:19