2012-11-20 199 views
1

我想寫這將執行以下IF語句.....IFF聲明SQL SELECT語句

這是在表中的結果的一個例子....

Name  Exd Name     RESULT 
HMAA USA  USA     HMAA USA 
HMIT ITL  ITL     HMIT ITL 
HMTT LOG  HYT    HMTT LOG (HYT) 
LTYS LTT  FYM     LTYS LTT (FYM) 
TTTT FFF  PPP     TTTT FFF (PPP) 
FDSE FGR  FGR     FDSE FGR 

結果應如下

HMTT LOG(HYT)-----爲兩個名稱不同我灣顯示在括號中的名稱隔爆被顯示),但是當 HMAA USA,和隔爆名稱也是美國 - 我只想顯示'名稱',而不是Exd名稱。

這是可能的IF語句....這是我的腳本,因爲你可以看到它的名稱+ Exd名稱,但是上面我想在這裏合併一個IIF語句只顯示按照以上邏輯。

SELECT distinct RNL.EmplID, 
RNL.ServiceType, rnl.[name] + ' ' + '(' + rnl.[Exd Name] + ')' as 'Vessel' 
FROM 
resultsIB RNL (nolock) 

回答

2

如果它是SQL Server,您可以嘗試:

select distinct RNL.EmplID, RNL.ServiceType, 
    rnl.[name] + 
    case 
     when rnl.[name] like '%' + rnl.[Exd Name] 
     then '' 
     else ' (' + rnl.[Exd Name] + ')' 
    end as 'Vessel' 
FROM resultsIB RNL (nolock) 

或使用iif (SQL Server 2012 only AFAIK)IIF是寫CASE簡寫方式):

select distinct RNL.EmplID, RNL.ServiceType, 
    rnl.[name] + 
    iif(rnl.[name] like '%' + rnl.[Exd Name], '', ' (' + rnl.[Exd Name] + ')') as 'Vessel' 
FROM resultsIB RNL (nolock) 
+0

'位置','substring'和'right'(或者他們的SQL Server等價物如果你不想使用LIKE,這將是其他選項。當然,他們都會做同樣的後綴檢查。 –

+0

@ muistooshort最好的方法是測試它們並選擇最有效的方法。 –

0
SELECT distinct RNL.EmplID, RNL.ServiceType, 
     CASE WHEN CHARINDEX(ExdName, Name) = 0 
      THEN Name + ' (' + ExdName + ')' 
      ELSE Name END AS 'Vessel' 
FROM resultsIB RNL (nolock)