在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