2010-05-25 4 views
2

У меня есть функция SQL, которая возвращает список команд.sql условный союз на rowcount

Я хочу присоединиться к дополнительному списку этого списка с помощью объединения, но только если первый выбор возвращает более одной строки.

Что-то вроде:

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

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

+0

Как вы уже догадались, выбор таблицы 1 имеет действительно сложные условия. Итак, что-то в этом роде было бы идеально! – Stavros

Смежные вопросы