2010-05-25 5 views
2

J'ai une fonction SQL qui retourne une liste d'équipes.union conditionnelle sql sur rowcount

Je souhaite joindre une liste supplémentaire à cette liste avec une union, mais uniquement si la première sélection renvoie plus d'une ligne.

Quelque chose comme:

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

Répondre

1

Si je comprends bien

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

Cela semble être ce que je veux, mais je voulais éviter de faire deux fois la même sélection (une pour le compte et une pour obtenir le résultat). – Stavros

0

Une façon serait de faire:

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

Pas assez, mais cela devrait fonctionner:

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

Si la sélection de la première table est compliqué vous pourriez le mettre dans un 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

Je ne sais pas pourquoi, mais cela ne semble pas fonctionner .. Pouvez-vous s'il vous plaît vérifier à nouveau? – Stavros

+0

Comme vous l'avez deviné, le choix de Table1 a des conditions vraiment compliquées .. Donc, quelque chose comme ça, serait parfait! – Stavros