2010-12-08 10 views
0

Supposons que vous avez un SQL imbriqué dans SQL Server dans lequel vous devez utiliser le résultat d'une fonction évaluée sur la partie extérieure sélectionnez:fonctions, variables et sélectionne imbriquées

SELECT FUN(...) as Result, 
     (SELECT count(*) 
     FROM Table 
     WHERE ... < Result 
FROM Table 
WHERE Condition 

Cela ne fonctionnera pas à cause d'une 'colonne inconnue Résultat' dans la requête interne.

Comment puis-je le réécrire?

+0

est-ce un exemple de la vie réelle s'il vous plaît? À première vue, il existe de bien meilleures façons de faire une telle requête. – gbn

+0

Je suis sûr à ce sujet. Je suis complètement nouveau à SQL Server. –

Répondre

1

Que diriez-vous les choses différemment: nidification

SELECT 
    r.Result, 
    (SELECT COUNT(*) FROM Table WHERE ... < r.Result) AS SomeCount 
FROM 
    (
    SELECT FUN(...) AS Result, ... FROM Table WHERE Condition 
) AS r 
+0

Cela a fonctionné. Merci. –

+0

@Roberto: C'est bon à entendre. Assurez-vous d'avoir un index sur le champ que vous comparez 'r.result', donc le' COUNT (*) 'revient rapidement. – Tomalak

0

Je considère quelque chose comme ça à la place si vous êtes sur SQL Server 2005

SELECT 
    ... 
FROM 
    (
    SELECT FUN(...) AS Result, ... FROM Table WHERE Condition 
) foo 
    CROSS APPLY 
    (
    SELECT COUNT(*) AS SomeCount FROM Table WHERE ... < foo.Result 
) 

Note: la requête que vous avez affichée peut souvent être résolu en utilisant la fenêtre/fonctions de classement dans SQL Server 2005+

Questions connexes