1

In SQL can you alias WHERE expressions so as to simplify your query?

Example I have

SELECT * FROM T
WHERE 
(x*y<15 AND x*z > 20)
OR 
(x*y>20 AND x*z < 100)

Is there a way to represent x*y as a and x*z as b so that I could rewrite my query as

SELECT * FROM T
WHERE 
(a<15 AND b>20)
OR 
(a>20 AND b<100)

I'm on SQL server

Justin Pihony
  • 66,056
  • 18
  • 147
  • 180
Matt
  • 25,943
  • 66
  • 198
  • 303

3 Answers3

4

You can try this way.

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)
Thit Lwin Oo
  • 3,388
  • 3
  • 20
  • 23
2

You can use a Common Table Expression if you are using SQL Server 2005 or later:

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)
rsbarro
  • 27,021
  • 9
  • 71
  • 75
1
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);
onedaywhen
  • 55,269
  • 12
  • 100
  • 138