2013-02-28 72 views
3

如果我有像这样多种选择:我可以有多种选择,但只返回一个结果集

select * from A where A.name = 'linköping' 

IF @@ROWCOUNT = 0 
begin 
    select * from A where A.amount = 45 
end 

...我得到1分的结果集,如果第一选择回报的东西。但是如果它运行第二个,我会得到两个结果集;第一个没有行,第二个没有行。

有没有办法只返回第二个结果集,如果第二个选择运行?

我写这样,因为安德烈Gordeev的回答这个职位代码:Can you have if-then-else logic in SQL?

(MSSQL 2000)

谢谢!

+0

在这种情况下,你应该使用'IF EXISTS' – 2013-02-28 09:53:14

回答

4

您需要防止第一选择通过检查,如果你会得到什么结果回来运行前的选择。

例如:

IF EXISTS (SELECT 1 FROM A WHERE A.name = 'linköping') 
BEGIN 
    SELECT * FROM A WHERE A.name = 'linköping' 
END 
ELSE 
BEGIN 
    SELECT * FROM A WHERE A.amount = 45 
END 
+0

如果你替换第一线这将是巨大的'IF EXISTS(SELECT 1从WHERE A.name = '林雪平') ' – 2013-02-28 09:57:57

+1

@ViswanathanIyer同意。这将会略微提升性能。我必须承认,我从下面的行复制并粘贴了查询:) – 2013-02-28 10:00:29

1

这将与IF-ELSE逻辑一起使用。 [测试]

DECLARE @count as int 
set @count = (SELECT count(1) from A where A.name = 'linköping') 
if (@count = 0) 
BEGIN 
    select * from A where A.amount = 45 
END 
ELSE 
BEGIN 
select * from A where A.name = 'linköping' 
END 
1

不,它是不可能返回的结果取决于select语句的数量。 如果你想做单选按照@RB或@Jwalin Shah解决方案。

0

试试这个

IF @@ROWCOUNT = 0 
BEGIN 
    select * from A where A.amount = 45 
END 
ELSE 
BEGIN 
    select * from A where A.name = 'linköping' 
END 
相关问题