Доступ к псевдонимам в T-SQL - PullRequest
       16

Доступ к псевдонимам в T-SQL

0 голосов
/ 08 февраля 2011

В запросе я создаю много полей, используя выражение CASE.

Мне нужно сослаться на эти поля позже в запросе, но, похоже, я не могу получить доступ к полю, используя его псевдоним - Iприходится повторять выражение CASE каждый раз, когда я хочу сослаться на его значение.

Есть ли простой способ доступа к этим полям?

Ответы [ 3 ]

5 голосов
/ 08 февраля 2011

Вы можете использовать CTE (при условии, что SQL Server 2005+), как этот очень простой пример:

DECLARE @Val INT
SET @Val = 1

;WITH CTEExample AS
(
SELECT CASE @Val WHEN 1 THEN 'A' ELSE 'B' END AS MyCaseField1
)

SELECT * FROM CTEExample WHERE MyCaseField1 = 'A'
0 голосов
/ 08 февраля 2011

Вы также можете использовать CROSS APPLY для этого , как в этом совете Ицик Бен Ган .

SELECT SalesOrderID, OrderDate, Week_Day
FROM Sales.SalesOrderHeader
  CROSS APPLY 
 (SELECT DATEPART(weekday, DATEADD(day, @@DATEFIRST - 7, OrderDate)) AS Week_Day) AS A
WHERE Week_Day NOT IN (1, 7); 

Вы должны знать, что повторное использование псевдонимов в предложении where сделает предикат неразрешимым, однако его следует использовать с осторожностью (это относится независимо от того, используете ли вы APPLY или CTE)

0 голосов
/ 08 февраля 2011

почему бы просто не сделать подзапрос

например

SELECT  foo.column
FROM    (
    SELECT
        CASE WHEN yourcase THEN 'a'
        ELSE 'b'
        END AS 'column'
    FROM    yourtable) AS foo

но это можно сделать с помощью CTE либо ( посмотрите на этот ответ )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...