Problemas al intentar ejecutar CTE en SQL Express 2008

24/07/2009 - 23:45 por Javier | Informe spam
Que tal,

He empezado a seguir los ejemplos de un libro, y al intentar hacer algo como
esto:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
SELECT SalesPersonID,TerritoryID COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)

Me arroja el siguiente error:

" Mens. 102, Nivel 15, Estado 1, Línea 3
Sintaxis incorrecta cerca de '('. "

No tengo idea de que pueda ser, he buscado algo referente a la creación de
CTE, para comprobar la sintaxis y no he localizado aún el error.

Alguna ayuda, por favor.

Gracias

Saludos
Javier Parada

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
25/07/2009 - 07:53 | Informe spam
Hola Javier,

On 24 jul, 23:45, "Javier" wrote:
Mostrar la cita
Aquí te falta una coma entre TerritoryID y COUNT(*)


Mostrar la cita
Y aquí tendrás que hacer algo con el TopSales(...) que se define con
el WITH.


Mostrar la cita
Prueba, por ejemplo, así:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
SELECT SalesPersonID,TerritoryID, COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)
SELECT * FROM TopSales

Saludos,
Carlos
#2 Javier
25/07/2009 - 08:22 | Informe spam
Hola Carlos, Gracias por contestar, efectivamente, como comente que recién
empiezo, lo que yo quería era "ver" que se generara bien la definición del
CTE, sin saber que parte de la sintaxis es, precisamente:

Syntax
[ WITH <common_table_expression> [ ,...n ] ]

<common_table_expression>:: expression_name [ ( column_name [ ,...n ] ) ]
AS
( CTE_query_definition )

CTE_query_definition
Specifies a SELECT statement whose result set populates the common table
expression. The SELECT statement for CTE_query_definition must meet the same
requirements as for creating a view, except a CTE cannot define another CTE.
For more information, see the Remarks section and CREATE VIEW
(Transact-SQL).

Por lo tanto me estaba faltando la parte de la ejecución de la consulta
(digamos que en la primer parte se define el CTE y en la segunda se ejecuta,
Vamos así lo entiendo yo) y esta finalmente queda de la siguiente forma:

WITH TopSales (SalesPersonID,TerritoryID,NumberOfSales)
AS
(
SELECT SalesPersonID,TerritoryID, COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)
SELECT * FROM TopSales
WHERE SalesPersonID IS NOT NULL
ORDER BY NumberOfSales DESC

Gracias

Saludos
Javier Parada

"Carlos M. Calvelo" escribió en el mensaje de
noticias:
Mostrar la cita
#3 Carlos M. Calvelo
25/07/2009 - 08:46 | Informe spam
Hola Javier,

On 25 jul, 08:22, "Javier" wrote:
Mostrar la cita
Quizás sea mejor no pensar en terminos de 'ejecución' sino
en que el WITH crea un contexto donde se define una tabla
(por medio del table expression) y en la segunda parte, en
ese contexto, se utiliza esa tabla.

Pero bueno... un juego de palabras? :-)

Saludos,
Carlos
#4 Javier
26/07/2009 - 03:00 | Informe spam
Hola Carlos,

Gracias por la aclaración de conceptos, la tomare en cuenta.

Saludos
Javier Parada
#5 Alejandro Mesa
27/07/2009 - 14:34 | Informe spam
Mostrar la cita
Que bueno que el juego de palabras no era en holandes, si no todavia yo
estuviese trabado con esto de las CTEs :))


AMB


"Carlos M. Calvelo" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida