sql查询根据匹配的列返回单个值

时间:2014-02-19 06:12:12

标签: sql sql-server

我有一个要求,如果查询字符串与column1匹配,则返回1.如果匹配第2列则返回2否则如果匹配第3列则返回3.

表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中是否可行,因为我在数据库技能方面不是很好。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

有几种方法。如果保证一次只能匹配一列,UNION将起作用:

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; 

答案 1 :(得分:0)

请尝试使用case

declare @var int
set @var=23

select 
    case @var when col1 then 1
            when col2 then 2
            when col3 then 3 end
from YourTable 
where 
    col1=@var OR 
    col2=@var OR 
    col3=@var

答案 2 :(得分:0)

尝试在查询中使用IF-ELSE条件,并使用传递的参数进行检查。