2011-06-01 18 views
3

我是绝对的SQL初学者。 例子: 我想做一个查询来选择人的名字与X 开始,如果结果为0,我想选择的人的名字与Y.如何在Microsoft SQL SELECT查询中执行IF?

开始我该怎么办呢?谢谢。

+0

那么,你是说用开始为Y人民的名字,如果结果不应该出现的结果是否找到X的值? – 2011-06-01 19:52:20

+0

N8,是的。你是对的。 – user776676 2011-06-01 20:27:13

回答

1

可能这是一个更好的解决方案:

select * from table where name like 'X%' 

if @@ROWCOUNT = 0 
    select * from table where name like 'Y%' 
+0

看起来很棒。我会试一试。谢谢。 – user776676 2011-06-02 01:30:29

3

我将问题解释为:如果未找到以X开头的名称,则显示以Y开头的名称。 该解决方案将是快,因为它会短切的那一刻起1记录的存在,发现

if exists(select * from table where name like 'X%') 
    begin 
    select * from table where name like 'X%' 
    end 
else 
    begin 
    select * from table where name like 'Y%' 
    end 

理想的名字列被编这个工作很好。

+1

这段代码将执行两次,每次两次执行'select * from'表,其中名称'X%'''!这是丑陋的解决方案! – VMAtm 2011-06-01 19:54:04

+1

一旦存在语句中第一条记录被击中,它将会快捷。性能明智,它会很好,只返回一个结果集。 – 2011-06-01 20:03:41

+0

菲利普,你的解释是正确的。但是我没有在MS SQL中看到任何IF或EXISTS关键字。我正在做直接的SQL查询。我不用C或Basic编码。谢谢。 – user776676 2011-06-01 20:32:38

0

有一些方法可以在单个SQL语句中执行此操作,但它们非常昂贵(在时间和资源方面)。你最好在存储过程中做这种逻辑。

+0

“它们非常昂贵” - 我认为你的意思是说它们*相对昂贵。例如,如果表格的基数相对较低,那么基于集合的解决方案的费用将绝对可以忽略不计。总是测试至少两个候选解决方案:) – onedaywhen 2011-06-02 12:40:29

0

这里有一个基于集合的解决方案:

SELECT * 
    FROM table 
WHERE NAME LIKE 'X%' 
UNION 
SELECT * 
    FROM table 
WHERE NAME LIKE 'Y%' 
     AND NOT EXISTS (
         SELECT * 
         FROM table AS T1 
         WHERE T1.NAME LIKE 'X%' 
        );