2012-11-06 13 views
10

mam poprawne roboczą T-SQL skrypt w tej formieSELECT SUM() FROM (SELECT (SELECT())

SELECT columnA 
     AS 
     'numbers' 
FROM tableA 
WHERE clause 

Skrypt ten daje mi jako jednej kolumnie, numerów, liczb całkowitych. I aby podsumować te.

Wywołanie „skrypt” powyższych linii próbowałem następującą konfigurację

SELECT SUM(numbers) 
FROM (
      script 
     ) 

Czytanie select count(*) from select mam to do pracy, jednak nie. wciąż otrzymuję „Niepoprawna składnia w pobliżu. "

Nie wiem, czy jest to ważne, ale jest tutaj nazwane columnA, które jest samo w sobie wykonywane przez instrukcję SELECT.

+1

Wydaje się, że nadużywanie pojęcia „skrypt”. Czy możesz wysłać * dokładne * zapytanie, którego używasz, i * dokładny * błąd, który ci daje? – ruakh

Odpowiedz

17

Trzeba alias na podzapytania:

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

Więc pełnej kwerendy będą:

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

BTW, jest to problem związany z tSQL. Oracle nie dba o to, czy alias jest twoim podzapytaniem. Nie jestem pewien co do MySQL lub innych, ale tSQL wymaga aliasu we wszystkich podzapytaniach. – Bill

+2

@Bill: Oracle robi to nie tak. Nie ma problemu z prawidłowym wdrażaniem. –

+0

@Bill moje preferencje to alias wszystkich podzapytań, czy jest to wymagane. Dzięki temu jest znacznie wyraźniejsze, skąd pochodzą dane. – Taryn

5

Nie ma absolutnie żadnych problemów, aby osiągnąć to, co chcesz. Nie widzimy Twojego zapytania dotyczącego hasła, ale najczęstszym problemem jest to, że ludzie zapominają dodać alias do swojej instrukcji zagnieżdżonej select. Spójrz na tej próbce, która działa perfekcyjnie:

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

Według PO, tutaj jest ostateczne zapytania:

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