2011-09-23 51 views
0

嗨,我想以檢索用戶ID使用的瀏覽器的列表選擇案例與子查詢中選擇並使用最

表包含

用戶ID INT

BrowserName爲nvarchar(40)

這是我的查詢

select browser = 
CASE 
    WHEN (PATINDEX('%IE%',BrowserName) IS not null) THEN SUBSTRING(BrowserName,PatIndex('%IE%',BrowserName),8) 
    WHEN (PATINDEX('%Firefox%',BrowserName) IS not null) THEN SUBSTRING(BrowserName,PatIndex('%Firefox%',BrowserName),8) 
    WHEN (PATINDEX('%Chrome%',BrowserName) IS not null) THEN SUBSTRING(BrowserName,PatIndex('%Chrome%',BrowserName),6) 
END 



from tableBrowsers where UserId =21 

但是如何在這個查詢中只選擇前1個子字符串。

例如:當在有需要的情況下語句只一行這種情況下返回後,我想這一點,但沒有得到主意如何的情況下,實現

THEN select top 1 SUBSTRING(BrowserName,PatIndex('%IE%',BrowserName),8) from browsertable 

輸出會是這樣

IE

FIREFOX

CHROME

如果用戶使用三種瀏覽器

回答

1

只需添加DISTINCT:比明

SELECT DISTINCT browser = 
CASE 
    WHEN (PATINDEX('%IE%',BrowserName) IS not null) THEN SUBSTRING(BrowserName,PatIndex('%IE%',BrowserName),8) 
    WHEN (PATINDEX('%Firefox%',BrowserName) IS not null) THEN SUBSTRING(BrowserName,PatIndex('%Firefox%',BrowserName),8) 
    WHEN (PATINDEX('%Chrome%',BrowserName) IS not null) THEN SUBSTRING(BrowserName,PatIndex('%Chrome%',BrowserName),6) 
END 
FROM tableBrowsers where UserId =21 
+0

其他?有沒有可能? ?雖然它服務於我的需求,但不同的需要更多的負載? ?? –

+0

我沒有看到任何其他的方式(除了可能GROUP BY,但這會使查詢更復雜,有效地是相同的)。爲了提高性能,您可能希望將計算出的子字符串值存儲在單獨的列中(例如,使用觸發器) – jeroenh