在SQL SELECT语句中重用别名字段

时间:2010-03-15 11:54:57

标签: sql sql-server sql-server-2008 alias

我想实现这样的目标:

SELECT 
  (CASE WHEN ...) AS FieldA,
  FieldA + 20 AS FieldB
FROM Tbl

假设通过“...”我已经替换了一个冗长而复杂的 CASE 语句,我选择{{1}时我不想重复并改为使用别名FieldB

请注意,这将返回多行,因此FieldA语句之外的DECLARE / SET在我的情况下并不好。

2 个答案:

答案 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。这让我:

  1. 命名我的计算列。

  2. 将计算的逻辑保存在一个地方,而不是分散在应用程序中的各种查询中。