代码之家  ›  专栏  ›  技术社区  ›  Ruslan

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

  •  11
  • Ruslan  · 技术社区  · 14 年前

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

    假设我用“…”替换了一个长而复杂的 案例 陈述 我不想重复 FieldB 使用别名 FieldA

    注意,这将返回多行,因此 DECLARE SET 外面 SELECT 对我来说,陈述是不好的。

    2 回复  |  直到 10 年前
        1
  •  14
  •   Peter Lang    14 年前

    解决方法是使用子查询:

    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
    
        2
  •  3
  •   Larry Lustig    14 年前

    当我有复杂的逻辑从表中的其他列值计算“虚拟”列值时,我通常会创建一个包含所有原始列和计算值的原始表的表视图。然后我做了其他的选择。这让我:

    1. 命名我的计算列。

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