Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL SELECT语句中重复使用别名字段_Sql_Sql Server_Sql Server 2008_Alias - Fatal编程技术网

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

在SQL SELECT语句中重复使用别名字段,sql,sql-server,sql-server-2008,alias,Sql,Sql Server,Sql Server 2008,Alias,我想实现这样的目标: SELECT (CASE WHEN ...) AS FieldA, FieldA + 20 AS FieldB FROM Tbl 假设通过“…”我替换了一个长而复杂的CASE语句,我不想在选择FieldB时重复它,而是使用别名FieldA 注意,这将返回多行,因此SELECT语句之外的DECLARE/SET在我的情况下是不好的。一种解决方法是使用子查询: SELECT FieldA, FieldA + 20 AS FieldB FROM ( SELE

我想实现这样的目标:

SELECT 
  (CASE WHEN ...) AS FieldA,
  FieldA + 20 AS FieldB
FROM Tbl
假设通过“…”我替换了一个长而复杂的CASE语句,我不想在选择
FieldB
时重复它,而是使用别名
FieldA


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

一种解决方法是使用子查询:

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

为了提高可读性,您还可以使用:


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

  • 命名我的计算列

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


  • 就我个人而言,我觉得派生表更容易阅读,但这只是我的问题。除非您使用提供物化视图的引擎并将其创建为物化视图,否则将不会对性能产生任何影响,在这种情况下,您将降低写性能,但会提高查询性能。
    WITH t AS (
      SELECT 
        (CASE WHEN ...) AS FieldA
      FROM Tbl
    )
    SELECT
      FieldA,
      FieldA + 20 AS FieldB
    FROM
      t