Ora*_*Kid 4 sql syntax sql-server-2005
我可以在SELECT语句中命名一个自定义列,并在WHERE子句中引用它而不重复代码吗?
例如;
SELECT RIGHT(REPLICATE('0', 5) + RTRIM(SOME_ID)), 5) AS DISPLAY_ID
FROM dbo.MY_TABLE
WHERE DISPLAY_ID LIKE '%005%'
Run Code Online (Sandbox Code Playgroud)
只有更复杂.我想仅在一个地方维护此代码,但SQL Server 2005强制我在WHERE子句中复制自定义SELECT.
我相信这在Microsoft SQL Server 2000中是可能的,但在2005年不再存在.
谢谢.
您可以使用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%'
Run Code Online (Sandbox Code Playgroud)
要么
;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%'
Run Code Online (Sandbox Code Playgroud)
有一点我知道你可以使用列别名,那就是你希望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
Run Code Online (Sandbox Code Playgroud)