在WHERE子句中使用SQL 2005中的命名自定义列?

时间:2010-04-01 17:48:56

标签: sql sql-server-2005 syntax

我可以在SELECT语句中命名一个自定义列,并在WHERE子句中引用它而不重复代码吗?

例如;

SELECT RIGHT(REPLICATE('0', 5) + RTRIM(SOME_ID)), 5) AS DISPLAY_ID
FROM dbo.MY_TABLE
WHERE DISPLAY_ID LIKE '%005%'

只是复杂得多。我想仅在一个地方维护此代码,但SQL Server 2005强制我在WHERE子句中复制自定义SELECT。

我相信这在Microsoft SQL Server 2000中是可行的,但在2005年不再适用。

感谢。

2 个答案:

答案 0 :(得分:6)

您可以使用 SUB SELECT或CTE功能

执行此操作
SELECT  *
FROm    (
            SELECT RIGHT(REPLICATE('0', 5) + RTRIM(SOME_ID), 5) AS DISPLAY_ID 
            FROM MY_TABLE 
        )   sub
WHERE   DISPLAY_ID LIKE '%005%' 

OR

;WITH Tbl AS(
        SELECT RIGHT(REPLICATE('0', 5) + RTRIM(SOME_ID), 5) AS DISPLAY_ID 
        FROM MY_TABLE 
)
SELECT  *
FROM    Tbl
WHERE   DISPLAY_ID LIKE '%005%' 

有一段时间我知道您可以使用列别名,当您希望 ORDER BY 该列别名时。

修改

多个CTE块

DECLARE @MY_TABLE TABLE(
        SOME_ID INT
)

DECLARE @Your_TABLE TABLE(
        SOME_ID INT
)

;WITH Table1 AS(
        SELECT *
        FROM @MY_TABLE
),
Table2 AS(
        SELECT *
        FROM @Your_TABLE
)
SELECT  *
FROM    Table1 t1 INNER JOIN
        Table2 t2 ON t1.SOME_ID = t2.SOME_ID

答案 1 :(得分:2)

你可以使用一个更清洁的子选择包装它,如下所示:

SELECT DISPLAY_ID
FROM (SELECT RIGHT(REPLICATE('0', 5) + RTRIM(SOME_ID)), 5) AS DISPLAY_ID
      FROM dbo.MY_TABLE) SubTable
WHERE DISPLAY_ID LIKE '%005%'