我有一个返回小组列表的SQL函数。rowcount上的SQL条件联合
我想通过联合来加入列表中的附加列表,但只有当第一个选择返回多于一行时。
喜欢的东西:
CREATE FUNCTION Teams()
RETURNS TABLE
AS
RETURN
(
SELECT * FROM TABLE1
if @@rowcount>1
UNION
SELECT * FROM TABLE2
end if
)
我有一个返回小组列表的SQL函数。rowcount上的SQL条件联合
我想通过联合来加入列表中的附加列表,但只有当第一个选择返回多于一行时。
喜欢的东西:
CREATE FUNCTION Teams()
RETURNS TABLE
AS
RETURN
(
SELECT * FROM TABLE1
if @@rowcount>1
UNION
SELECT * FROM TABLE2
end if
)
如果我理解正确
CREATE FUNCTION Teams()
RETURNS TABLE
AS
RETURN
(
if (select COUNT(*) from TABLE2)>1
SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
else
SELECT * FROM TABLE1
)
一种方式是做:
IF EXISTS(SELECT 1 FROM TABLE1)
SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
ELSE
SELECT * FROM TABLE1
不漂亮,但这个应该工作:
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)
)
这似乎是我想要的,但我想避免做同样的选择两次(一个数和一个得到结果).. – Stavros 2010-05-27 09:15:44