在SQL中,您可以使用別名WHERE表達式來簡化查詢嗎?別名WHERE子句來簡化您的查詢
比如我有
SELECT * FROM T
WHERE
(x*y<15 AND x*z > 20)
OR
(x*y>20 AND x*z < 100)
有沒有一種方法來表示X * Y爲a和x * Z爲B,這樣我可以重寫我的查詢作爲
SELECT * FROM T
WHERE
(a<15 AND b>20)
OR
(a>20 AND b<100)
我在SQL服務器
在SQL中,您可以使用別名WHERE表達式來簡化查詢嗎?別名WHERE子句來簡化您的查詢
比如我有
SELECT * FROM T
WHERE
(x*y<15 AND x*z > 20)
OR
(x*y>20 AND x*z < 100)
有沒有一種方法來表示X * Y爲a和x * Z爲B,這樣我可以重寫我的查詢作爲
SELECT * FROM T
WHERE
(a<15 AND b>20)
OR
(a>20 AND b<100)
我在SQL服務器
您可以嘗試這種方式。
SELECT *
FROM
(
SELECT x, y, z, (x*y) xy, (x*z) xz
FROM T
) R
WHERE (xy < 15 AND xz > 20) OR (xy > 20 AND xz < 100)
這是否會工作? – 2012-03-09 02:28:17
爲什麼不..你試過了嗎? – 2012-03-09 02:33:08
啊。錯過了外部選擇。你是對的。 – 2012-03-09 02:45:10
你可以,如果你使用SQL Server 2005或更高版本使用Common Table Expression:
DECLARE @myTable TABLE([x] INT, [y] INT, [z] INT)
INSERT INTO @myTable VALUES(2, 1, 1)
INSERT INTO @myTable VALUES(3, 2, 2)
INSERT INTO @myTable VALUES(4, 2, 3)
INSERT INTO @myTable VALUES(5, 2, 5)
INSERT INTO @myTable VALUES(6, 4, 5)
;WITH CTE ([x], [y], [z], [xy], [xz]) AS
(
SELECT x, y, z, x*y, x*z FROM @myTable
)
SELECT x, y, z
FROM CTE
WHERE
(xy < 15 AND xz > 20)
OR (xy > 20 AND xz < 100)
WITH T1
AS
(
SELECT T.*,
x * y AS a,
x * z AS b
FROM T
)
SELECT * FROM T1
WHERE
(a<15 AND b>20)
OR
(a>20 AND b<100);
類似的問題:http://stackoverflow.com/questions/260399/using-an- alias-column-in-the-where-clause-in-ms-sql-2000 – diaho 2012-03-09 02:21:03
請不要在SQL前加標題。那是什麼標籤 – 2012-03-09 03:17:59