SoloCodigo

Bases de Datos => SQL Server => Mensaje iniciado por: lencho en Viernes 9 de Febrero de 2007, 00:45

Título: Duda Con Vistas En Sql Server
Publicado por: lencho en Viernes 9 de Febrero de 2007, 00:45
resulta que trato de crear una vista en SQL Server y cuando coloco un order by y lo ejecuto me sale un error que dice que no puedo usar esa clausula.

Alguien sabe por que ?
y que puedo hacer ?

BYTE.
Título: Re: Duda Con Vistas En Sql Server
Publicado por: aicrag en Viernes 9 de Febrero de 2007, 02:52
sería de mucha ayuda que pongás el código de tu sql para ver lo que pasa, porque así pueden ser muchas cosas..  :kicking:
Título: Re: Duda Con Vistas En Sql Server
Publicado por: lencho en Viernes 9 de Febrero de 2007, 03:02
OK

Código: Text
  1.  
  2. CREATE VIEW dbo.Productos_mas_vendidos
  3. AS
  4. SELECT TProducto.CodProducto,
  5.     TProducto.NombreGenerico, SUM(TDetalleVenta.Cantidad)
  6.     AS Cantidad, TLaboratorio.Descripcion AS Laboratorio,
  7.     TPresentacion.Descripcion AS Presentacion
  8. FROM TProducto INNER JOIN
  9.     TLote ON
  10.     TProducto.CodProducto = TLote.CodProducto INNER JOIN
  11.     TDetalleVenta ON
  12.     TLote.Numero = TDetalleVenta.CodLote INNER JOIN
  13.     TVenta ON
  14.     TDetalleVenta.CodVenta = TVenta.CodVenta INNER JOIN
  15.     TPresentacion ON
  16.     TProducto.CodPresentacion = TPresentacion.CodPresentacion INNER
  17.      JOIN
  18.     TLaboratorio ON
  19.     TProducto.CodLaboratorio = TLaboratorio.CodLaboratorio
  20. GROUP BY TProducto.CodProducto, TProducto.NombreGenerico,
  21.     TLaboratorio.Descripcion, TPresentacion.Descripcion
  22.  
  23.  

hasta ahi esta bien, pero cuando le meto el ORDER BY Cantidad DESC y lo ejecuto, me sale el error.

BYTE.
Título: Re: Duda Con Vistas En Sql Server
Publicado por: aicrag en Viernes 9 de Febrero de 2007, 03:04
resulta que probando en el Query analizer me da dice que la clausula order by no es válida en vistas, funciones en linea, tablas derivadas y subconsultas a menos que se especifique la clausula top....    :P
Título: Re: Duda Con Vistas En Sql Server
Publicado por: lencho en Viernes 9 de Febrero de 2007, 03:15
pues le pongo la clausula TOP y me sigue saliendo el mismo error.

pero lo curioso es que me fijo en el resultado y me lo ordena como lo quiero.

BYTE.
Título: Re: Duda Con Vistas En Sql Server
Publicado por: aicrag en Viernes 9 de Febrero de 2007, 23:43
:unsure:  , como??? si te da error, como podés ver el resultado...

según tu consulta sería algo así:

CREATE VIEW dbo.Productos_mas_vendidos
AS
SELECT TOP 100 PERCENT TProducto.CodProducto,
   TProducto.NombreGenerico, SUM(TDetalleVenta.Cantidad)
   AS Cantidad, TLaboratorio.Descripcion AS Laboratorio
   ...
Título: Re: Duda Con Vistas En Sql Server
Publicado por: lencho en Sábado 10 de Febrero de 2007, 03:25
Cita de: "aicrag"
:unsure:  , como??? si te da error, como podés ver el resultado...

según tu consulta sería algo así:

CREATE VIEW dbo.Productos_mas_vendidos
AS
SELECT TOP 100 PERCENT TProducto.CodProducto,
   TProducto.NombreGenerico, SUM(TDetalleVenta.Cantidad)
   AS Cantidad, TLaboratorio.Descripcion AS Laboratorio
   ...
mi consulta es identica  a la tuya excepto el PERCENT. Para que sirve ?

BYTE.
Título: Re: Duda Con Vistas En Sql Server
Publicado por: aicrag en Sábado 10 de Febrero de 2007, 20:31
y PERCENT es el porcentaje de filas de la consulta..

si tuvieras algo como

SELECT TOP n PERCENT campos FROM tabla

si no especificás el PERCENT n seria el número de filas que se devuelven, pero si sí lo hacés n sería el porcentaje de filas del conjunto de registros..  :)

así el 100 PERCENT como estás en una vista y no se permite el ORDER BY especificas el TOP con el 100% de los registros.   :ph34r:
Título: Re: Duda Con Vistas En Sql Server
Publicado por: trentia en Martes 24 de Abril de 2007, 16:22
En vistas no podemos usar clausulas order by ni clausulas top, ....

Estas clausulas la deberemos usar al ejecutar la vista.

Por ejemplo

create view dbo.View1
as
........


SELECT * FROM View1 Order by X
SELECT TOP 100 * FROM View1 Order by X

Deberemos de tratar a la vista como si fuera una tabla

Espero que haya sido de ayuda

Javier Tirado
IT Consultor
TRENTIA Consulting
Business Intelligence (http://www.trentia.es)