2011-05-10 14 views
5

Esperaba ejecutar una única consulta y obtener resultados de eso. Sin embargo, MSSQL se queja de un error de sintaxis cerca de la palabra clave GROUP. Tenía la esperanza de hacer lo siguiente.Subselección falla, pero como ver funciona

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

En lugar de eso tuvieron que crear una vista, View_1, con la consulta

SELECT DISTINCT Field_1, Field_2 
    FROM Table_1 

y luego hacer un

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

La cuestión es por qué, en mi opinión, es esencialmente el mismo SQL.

Nota: Los nombres de campo, tabla y vista se han cambiado para proteger a los inocentes. ;-)

Respuesta

13

SQL Server requiere que se especifique un alias de tabla para una vista de tabla/línea derivada: Respuesta

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, una solución simple. Muchas gracias. –

+0

Para ser justos, no se puede culpar a SQL Server por este diseño de lenguaje incorrecto porque está especificado en Standard SQL-92. En sus escritos, [Hugh Darwen] (http://www.dcs.warwick.ac.uk/~hugh/TTM/Importance-of-Column-Names.pdf) siempre emplea un nombre de correlación de tabla peyorativa (algo más de SQL -92; 'alias' es coloquial :) como 'TEETH_GNASHER'. – onedaywhen

0

OMG ponis es 100% correcto.

creo que esto va a mostrar mismos resultados, pero no puedo probar ahora:

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