代码之家  ›  专栏  ›  技术社区  ›  Héctor Álvarez

MS SQL Server:操作其他选定列中的当前选择值

  •  4
  • Héctor Álvarez  · 技术社区  · 8 年前

    我想从所选列中取一个值来操作下一列。例如:

    SELECT CASE 
      WHEN ID < 4 THEN ID
      ELSE 10
    END
    AS MY_ID,
    MY_ID + 5 AS EXTRA_ID
    FROM FOO
    

    这将为IDs输出 1,2,3,4,5 :

    MY_ID EXTRA_ID
    1      6
    2      7
    3      8
    10     15
    10     15
    

    MY_ID + 5 它会抱怨我的ID不存在(这是一个别名,所以很有意义),并且 ID + 5 将读取 1+5, 2+5, 3+5, 4+5, 5+5 1+5, 2+5, 3+5, 4+10, 5+10

    4 回复  |  直到 8 年前
        1
  •  2
  •   niktrs    8 年前

    SELECT CASE 
      WHEN ID < 4 THEN ID
      ELSE 10
    END
    AS MY_ID,
    CASE 
      WHEN ID < 4 THEN ID
      ELSE 10
    END + 5 AS EXTRA_ID
    FROM FOO
    

    另一种方法是使用表达式在SSR内创建额外的_id列值

    = Fields!my_id.value + 5

        2
  •  1
  •   crumble    8 年前

        3
  •  0
  •   sagi    8 年前

    SELECT t.*,
           t.my_id + 5 as extra_id
    FROM(Your Query) t
    

    派生列在正在创建的同一层中不可用。通过用另一个select包装它们,可以使它们可用(这是因为内部查询在外部查询之前处理)。

        4
  •  0
  •   Rominus    8 年前

    您只需要创建一个子查询 MY_ID 在做任何事情之前。通过创建

    SELECT 
        a.MY_ID, 
        a.MY_ID + 5 AS EXTRA_ID
    from
        (SELECT 
            CASE 
              WHEN ID < 4 THEN ID
              ELSE 10
            END
            AS MY_ID
        FROM FOO) as a