2010-05-25 2 views
2

팀 목록을 반환하는 SQL 함수가 있습니다.rowcount에서 sql 조건부 합집합

첫 번째 select가 둘 이상의 행을 반환하는 경우에만 공용과 함께 해당 목록에 추가 목록을 참여시키고 싶습니다.

뭔가 같은 :

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에 넣을 수 있습니다.

(210)
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

당신이 짐작했듯이, Table1을 선택하면 정말 복잡한 조건이 생깁니다. 그래서, 그런 식으로 완벽 할 것입니다! – Stavros