2010-12-08 13 views
0

Sagen Sie bitte eine verschachtelte SQL in SQL Server, in dem Sie das Ergebnis einer Funktion auf der Außen wählen ausgewertet verwenden müssen:Funktionen, Variablen und verschachtelte wählt

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

die aufgrund eines nicht funktionieren 'unbekannte Spalte Ergebnis' in der inneren Abfrage.

Wie kann ich es umschreiben?

+0

ist dies ein Beispiel aus dem wirklichen Leben? Auf den ersten Blick gibt es viel bessere Möglichkeiten, eine solche Abfrage durchzuführen. – gbn

+0

Da bin ich mir sicher. Ich bin völlig neu in SQL Server. –

Antwort

1

Wie wäre es Verschachtelung Dinge anders:

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

Das hat funktioniert. Vielen Dank. –

+0

@Roberto: Gut zu hören. Stellen Sie sicher, dass Sie einen Index für das Feld haben, mit dem Sie "r.result" vergleichen, so dass "COUNT (*)" schnell zurückkehrt. – Tomalak

0

ich so etwas wie dies betrachten würde stattdessen, wenn Sie auf SQL Server sind 2005

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

Hinweis: die Abfrage Sie auf dem Laufenden oft gelöst werden Verwenden von Fenster-/Rankingfunktionen in SQL Server 2005+

Verwandte Themen