我想实现这样的目标:
SELECT
(CASE WHEN ...) AS FieldA,
FieldA + 20 AS FieldB
FROM Tbl
假设通过“...”我已经替换了一个冗长而复杂的 CASE 语句,我选择{{1}时我不想重复并改为使用别名FieldB
。
请注意,这将返回多行,因此FieldA
语句之外的DECLARE
/ SET
在我的情况下并不好。
答案 0 :(得分:13)
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
答案 1 :(得分:3)
当我有一个复杂的逻辑来计算表中其他列值的“虚拟”列值时,我通常会创建原始表的单表视图,其中包含所有原始列以及计算值。然后我对视图做其他SELECT。这让我:
命名我的计算列。
将计算的逻辑保存在一个地方,而不是分散在应用程序中的各种查询中。