2014-02-19 191 views
1

我有一個要求,如果查詢字符串匹配column1,返回我1.如果它匹配列2返回2否則如果它匹配列3返回3.SQL查詢返回基於列匹配的單個值

表strunctre:

col1 col2 col3 

11  12  13 
22  23  24 

如果我的查詢字符串是23,那麼我期待2的返回值,因爲它匹配COL2。

類似下面:

select 1 
from table1 
where col1=querystring 
     and orderid=xxx 
     or select 2 from table1 
     where col2=querystring 
       and orderid=xxx 
       or select 3 from table1 
        where col3=querystring and orderid=xxx 

基本上我期待一個查詢其返回基於它匹配的列單值。

這是SQL中的東西,因爲我不擅長數據庫技能。

任何幫助,高度讚賞。

+0

所有的'數據'都是唯一的嗎?例如,如果您在col1中有11個,它不會在其他列中可用? – Hamidreza

回答

2

有幾種方法。如果有一個保證不超過一列將匹配在某個時間,某個聯盟將工作:

SELECT 1 AS SomeCol 
FROM table1 
WHERE col1 = querystring 
     AND orderid = xxx 
UNION 
SELECT 2 
FROM table1 
WHERE col2 = querystring 
     AND orderid = xxx 
UNION 
SELECT 3 
FROM table1 
WHERE col3 = querystring 
     AND orderid = xxx; 

如果超過一個匹配可能發生,另一種方法是這樣的(注意優先順序是現在COL1 ,COL2,COL3等):

SELECT CASE 
     WHEN col1 = querystring THEN 1 
     WHEN col2 = querystring THEN 2 
     WHEN col3 = querystring THEN 3 
     END AS SomeCol 
FROM table1 
WHERE orderid = xxx; 
+0

謝謝斯圖爾特。是的,它的工作。我用第二個(CASE查詢)。 –

+0

同意,第二種情況會更好 - 它是DRYer和更高性能:-)只有在有不同的過濾條件或不同的源表時才需要UNION。 – StuartLC

0

嘗試使用您的查詢IF-ELSE條件和傳遞的參數檢查。