2012-11-06 17 views
10

Ich habe ein richtige Arbeits T-SQL-Skript in dieser FormSELECT SUM() FROM (SELECT (SELECT())

SELECT columnA 
     AS 
     'numbers' 
FROM tableA 
WHERE clause 

Dieses Skript gibt mir als eine Spalte, die so genannte Zahlen, von ganzen Zahlen. I wollen diese summieren.

die obigen Zeilen ‚script‘ Aufruf habe ich versucht, das folgende Setup

SELECT SUM(numbers) 
FROM (
      script 
     ) 

select count(*) from select Lese ich dies sollte jedoch arbeiten, ist es nicht. ich halte „falsche Syntax immer in der Nähe. "

Ich weiß nicht, ob es wichtig ist, aber das heißt hier columnA wird selbst durch eine SELECT-Anweisung erstellt.

+1

Sie scheinen zu missbrauchen den Begriff „Skript“. Könnten Sie die * genaue * Anfrage, die Sie verwenden, und den * genauen * Fehler, den Sie erhalten, posten? – ruakh

Antwort

17

Sie benötigen einen Aliasnamen auf der Unterabfrage:

SELECT SUM(numbers) 
FROM  
(
    script -- your subquery will go here 
) src -- place an alias here 

So Ihre vollständige Abfrage wird:

select sum(numbers) 
from 
(
    SELECT columnA AS numbers 
    FROM tableA 
    WHERE clause 
) src 
+0

BTW, das ist ein tSQL-Problem. Oracle ist es egal, wenn Sie Ihre Unterabfrage aliasieren. Nicht sicher über MySQL oder andere, aber tSQL erfordert einen Alias ​​für alle Unterabfragen. – Bill

+2

@Bill: Oracle tut es falsch dort. Es ist kein Problem, Dinge richtig umzusetzen. –

+0

@Bill meine Vorliebe besteht darin, alle Unterabfragen zu aliasieren, ob es erforderlich ist oder nicht. Es macht deutlich klarer, woher die Daten kommen. – Taryn

5

Es absolut kein Problem überhaupt zu erreichen, was Sie wollen. Wir sehen Ihre Entier-Abfrage nicht, aber das häufigste Problem ist, dass die Benutzer vergessen, ihrer verschachtelten select-Anweisung einen Alias ​​hinzuzufügen. Werfen Sie einen Blick auf dieses Beispiel, das perfekt funktioniert:

select sum(col1) as sum1 
from (select col1 
     from (select 1 col1 union all select 2 union all select 3) tmp 
    ) tmp2 

Nach der OP, hier ist Ihre letzte Suche:

SELECT SUM(numbers) 
FROM (
      SELECT columnA 
        AS 
        'numbers' 
       FROM tableA 
      WHERE clause 
     ) tmp