SQL Server - Duda con procedimiento

   
Vista:

Duda con procedimiento

Publicado por El_LoBooo (2 intervenciones) el 26/06/2012 20:58:19
Hola a todos.

Tengo hecho un procedimiento que no logro que funcione del todo. Necesito que me muestre el artículo más vendido y la cantidad. Con el código que tengo hecho me lo muestra si sólo se ha vendido una vez (articulo y cantidad total vendida), pero si hay varias ventas el campo articulo me sale NULL. A ver si alguien puediera ayudarme

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
USE Ferreteria
GO
/* Comprueba si existe ya el procedimiento almacenado y si existe lo borra */
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'articulovendido_entre2fechas' AND type = 'P')
DROP PROCEDURE articulovendido_entre2fechas
GO
 
--Crea el procedimiento
CREATE PROCEDURE articulovendido_entre2fechas
@fechaini datetime,
@fechafinal datetime,
@maximo float  OUTPUT,
@producto NVARCHAR(60) OUTPUT
as
BEGIN
Select @maximo = max(Totales.CantidadMaxima)
from (select Articulo, sum(Cantidad) as CantidadMaxima
	from Albaranes Al, Articulos Ar
	where Al.NumArticulo=Ar.NumArticulo and
		Fecha between @fechaini and @fechafinal
	group by Articulo) as Totales;
select Articulo
	from Albaranes Al, Articulos Ar
	where Al.NumArticulo=Ar.NumArticulo and
	Cantidad = @maximo
 
END
 
Declare @maximo float,@producto nvarchar(60)
Execute articulovendido_entre2fechas '11-11-2008','13-11-2011',@maximo OUTPUT,@producto OUTPUT
select @producto as 'producto', @maximo as 'existencias'


Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Duda con procedimiento

Publicado por Isaias (3181 intervenciones) el 26/06/2012 23:12:52
Primero, las fechas manejas siempre en ANSI (yyyymmdd), segundo, no las compares con BETWEEN, tercero, une tus tablas con INNER JOIN

select Articulo, max(sum(Cantidad)) as CantidadMaxima
from Albaranes inner join Articulos on Al.NumArticulo = Ar.NumArticulo
where Fecha >= @fechaini and
Fecha <= @fechafinal
group by Articulo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con procedimiento

Publicado por El_LoBooo (2 intervenciones) el 26/06/2012 23:27:07
Gracias por contestar Isaias.

Como tu has puesto es indudablemente mucho mejor, una única consulta y menos código pero, ¿sería posible modificando la segunda consulta de mi código hacerlo funcionar? Ya es por cabezonería, aunque no sea la forma óptima.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Duda con procedimiento

Publicado por Isaias (3181 intervenciones) el 27/06/2012 03:44:46
Pides una solucion como si fuera posible incrustar un motor de VW en un Testarosa, ¿porque no sigues las mejores practicas en el diseño de codigo T-SQL?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar