2010-05-25 29 views
2

我有一个返回小组列表的SQL函数。rowcount上的SQL条件联合

我想通过联合来加入列表中的附加列表,但只有当第一个选择返回多于一行时。

喜欢的东西:

CREATE FUNCTION Teams() 
RETURNS TABLE 
AS 
RETURN 
(
    SELECT * FROM TABLE1 
    if @@rowcount>1  
    UNION 
    SELECT * FROM TABLE2 
    end if 
) 

回答

1

如果我理解正确

CREATE FUNCTION Teams() 
RETURNS TABLE 
AS 
RETURN 
( 
    if (select COUNT(*) from TABLE2)>1 
    SELECT * FROM TABLE1 
    UNION 
    SELECT * FROM TABLE2 
    else 
    SELECT * FROM TABLE1 
) 
+0

这似乎是我想要的,但我想避免做同样的选择两次(一个数和一个得到结果).. – Stavros 2010-05-27 09:15:44

0

一种方式是做:

IF EXISTS(SELECT 1 FROM TABLE1) 
    SELECT * FROM TABLE1 
    UNION 
    SELECT * FROM TABLE2 
ELSE 
    SELECT * FROM TABLE1 
2

不漂亮,但这个应该工作:

CREATE FUNCTION Teams() 
RETURNS TABLE 
AS 
RETURN 
( 
    SELECT * FROM TABLE1 
    UNION 
    SELECT * FROM TABLE2 WHERE EXISTS (SELECT * FROM TABLE1) 
) 

如果从第一个表复杂的你可以把它放到CTE中:

CREATE FUNCTION Teams() 
RETURNS TABLE 
AS 
RETURN 
( 
    WITH Result AS 
    (
     SELECT * FROM TABLE1 WHERE ComplicatedConditions = 1 
) 
    SELECT * FROM Result 
    UNION 
    SELECT * FROM TABLE2 WHERE EXISTS (SELECT * FROM Result) 
) 
+0

我不知道为什么,但是这似乎并没有工作..请您再次检查? – Stavros 2010-05-27 09:14:34

+0

正如你猜测的那样,Table1的选择具有非常复杂的条件。所以,类似的东西将是完美的! – Stavros 2010-05-27 09:17:30