2011-05-10 36 views
5

Miałem nadzieję uruchomić jedno zapytanie i uzyskać z tego wyniki. Jednak MSSQL skarży się na błąd składniowy w pobliżu słowa kluczowego GROUP. Miałem nadzieję, że zrobię co następuje.Subselect nie działa, ale jako widok działa

SELECT COUNT(*) AS cnt,Field_2 
    FROM (SELECT DISTINCT Field_1, Field_2 
      FROM Table_1) 
GROUP BY Field_2 
    HAVING COUNT(*) > 1 

Zamiast tego musiałem utworzyć widok, View_1, z kwerendy

SELECT DISTINCT Field_1, Field_2 
    FROM Table_1 

a następnie wykonaj

SELECT COUNT(*) AS cnt, Field_2 
    FROM View_1 
GROUP BY Field_2 
    HAVING COUNT(*) > 1 

Powstaje pytanie, dlaczego, moim zdaniem to jest w zasadzie ten sam SQL.

Uwaga: Nazwy pól, tabel i widoków zostały zmienione, aby chronić niewinnych. ;-)

Odpowiedz

13

SQL Server wymaga określenia aliasu tabeli dla pochodzącego widoku tabeli/inline: odpowiedź

SELECT COUNT(*) AS cnt, 
     x.Field_2 
    FROM (SELECT DISTINCT Field_1, Field_2 
      FROM Table_1) AS x 
GROUP BY x.Field_2 
    HAVING COUNT(*) > 1 
+0

Aha proste rozwiązanie. Wielkie dzięki. –

+0

Aby być uczciwym, SQL Server nie może być obwiniany za ten zły projekt językowy, ponieważ jest określony w Standardowym SQL-92. W swoich pismach [Hugh Darwen] (http://www.dcs.warwick.ac.uk/~hugh/TTM/Importance-of-Column-Names.pdf) zawsze stosuje pejoratywną nazwę korelacji tabeli (coś innego z SQL -92; 'alias' jest kolokwialny :) taki jak 'TEETH_GNASHER'. – onedaywhen

0

OMG Ponies' jest 100% poprawne.

myślę, że będzie to pokazać same wyniki, ale nie mogę przetestować teraz:

SELECT COUNT(DISTINCT Field_1) AS cnt 
    , Field_2 
FROM Table_1 
GROUP BY Field_2 
HAVING COUNT(DISTINCT Field_1) > 1 
Powiązane problemy