2014-02-19 130 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条件和传递的参数检查。