Использовать именованный пользовательский столбец в SQL 2005 в предложении WHERE? - PullRequest
4 голосов
/ 01 апреля 2010

Можно ли назвать пользовательский столбец в операторе 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 вынуждает меня дублировать пользовательский SELECT в предложении WHERE.

Я полагаю, что это было возможно в Microsoft SQL Server 2000, но не в 2005 году.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 01 апреля 2010

Вы можете сделать это, используя 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 псевдоним столбца.

EDIT:

Несколько блоков 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
2 голосов
/ 01 апреля 2010

Вы можете обернуть его, выбрав немного чище, например:

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%'
...