我有一个要求,如果查询字符串与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中是否可行,因为我在数据库技能方面不是很好。
非常感谢任何帮助。
答案 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
条件,并使用传递的参数进行检查。