在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