2015-01-16 36 views
0

我有一段時間讓這個查詢工作。基本上我需要做一個CASE語句來獲取該人的NickName,否則使用他們的FirstName。然後在WHERE語句中,對上面的CASE語句做一個LIKE語句。SQL - 在哪裏使用SELECT別名

我已經能夠得到它的工作,如果我只有做名字/暱稱,但是當我在其他列添加它停止工作。

這裏是我有

SELECT 
    LastName 
    , Company 
    , Status 
    , CASE 
     WHEN NickName = '' THEN FirstName 
     WHEN NickName IS NULL THEN FirstName 
     ELSE NickName 
    END AS FName 
FROM database 
WHERE 
     Status = 'Active' 
    AND Company = '@Company' 
    AND FName + ' ' + LastName LIKE '%@search%' 
    OR LastName + ', ' + FName LIKE '%@search%' 

顯然,上述不工作,因爲我想在我的WHERE子句中使用的別名。我得到

Msg 207, Level 16, State 1, Line 14 
Invalid column name 'FName'. 
Msg 207, Level 16, State 1, Line 15 
Invalid column name 'FName'. 

任何幫助,非常感謝。謝謝!

+0

RDBMS這是什麼道理? –

+0

SQL Server。下面的答案讓我工作! – user3320324

回答

2

您可以使用公用表表達式或子查詢來創建FName作爲新結果集的一種虛擬列。你可以使用結果集作爲一種虛擬表,並在where子句中對其進行過濾。

SELECT * 
FROM (
    SELECT 
    LastName 
    , Company 
    , Status 
    , CASE 
     WHEN NickName IS NULL OR NickName = '' THEN FirstName 
     ELSE NickName 
     END AS FName 
    FROM database 
    WHERE Status = 'Active' 
    AND Company = '@Company' 
) FNames 
WHERE FName + ' ' + LastName LIKE '%@search%' 
    OR LastName + ', ' + FName LIKE '%@search%' 
+0

完美的作品!我嘗試了這樣的東西,但我沒有從子查詢中選擇*。使所有區別:) – user3320324

1

使用CROSS APPLY創建別名

SELECT LastName 
    , Company 
    , Status 
    , FName 
FROM database 
    CROSS APPLY (
     SELECT CASE WHEN NickName = '' THEN FirstName 
        WHEN NickName IS NULL THEN FirstName 
        ELSE NickName 
       END AS FName 
    ) AS CA1 
WHERE Status = 'Active' 
     AND Company = '@Company' 
     AND FName + ' ' + LastName LIKE '%@search%' 
     OR LastName + ', ' + FName LIKE '%@search%' 
1

你可以不用CASE語句

SELECT * 
FROM (
    SELECT 
     LastName 
     , Company 
     , Status 
     , ISNULL(NULLIF(NickName, ''), FirstName) AS FName 
    FROM database 
    WHERE Status = 'Active' 
     AND Company = '@Company') data 
WHERE (FName + ' ' + LastName LIKE '%' + @search + '%') 
    OR (LastName + ', ' + FName LIKE '%' + @search + '%') 
+0

我沒有測試這個,但我不認爲它會工作,因爲你在WHERE子句中使用你的別名(FName)。這是不允許的,因此 – user3320324

+0

的原始原因至少在敲它之前嘗試。我正在使用子查詢的別名。您原來的帖子沒有使用子查詢。使用子查詢的別名是完全有效的sql – Spock

+0

B.t.w.您接受作爲答案的帖子也使用where子句中的別名... – Spock