Subselect
Estoy haciendo un store para una Base de datos SQL SERVER2000 y el problema que tengo es que tengo un error de sintaxis y por ese motivo no puedo guardarla. Me dice que tengo un error cerca de la linea 50 (la que esta arriba de donde dice "t1 left join" y lo mismo de la linea 59 que es la que esta arriba del "GO".
Yo lo que quiero hacer con este SP es seleccionar por ejemplo del articulo 1111 el total de todas las ventas en todas las sucursales es decir:
Articulo descripcion precio suc cantvendida canttotalvendida
1111 jean 15 1 25 100
1111 jean 15 2 25 100
1111 jean 15 3 25 100
1111 jean 15 4 25 100
2222 camisa 75 1 25 25
Entonces por eso arme la subconsulta, para que una vez que me trajo la cantidadtotalvendida, yo pueda ordenerlo por el criterio de más vendido.
Te dejo el Store Procedure:
CREATE proc RankingStock_Nuevo
@FD as DATETIME = '2009/08/01',
@FH as DATETIME = '2009/08/08',
@SucursalDesde as int = null,
@SucursalHasta as int = null,
@Rubro as varchar(3) = null,
@Item as varchar(6) = null,
@Diferencia as money = null
AS
while len(@Rubro) < 3
begin
set @Rubro = '0' + @Rubro
end
while len(@Item) < 6
begin
set @Item = '0' + @Item
end
print @FD
print @FH
select Articulo, Descripcion, Nombre, CantidadVendida, CantidadStock, Precio, CantidadTotalVend
(
SELECT ART.Cod_Art AS Articulo, isnull(ART.descItem, '- Articulo no cargado -') AS Descripcion, SUC.Nombre as Nombre,
SUM(VEN. Cantidad) AS CantidadVendida, max(INV. Cantidad) as CantidadStock, max(VEN. PrecioUnitario) as Precio
FROM CueVentas VEN LEFT JOIN
(SELECT descItem, Cod_Art
FROM vw_Items
GROUP BY descItem, Cod_Art) ART ON VEN.Cod_Art = ART.Cod_Art COLLATE SQL_Latin1_General_CP1_CI_AS
INNER JOIN Inventario INV ON VEN.Cod_Art = INV.CodArt
INNER JOIN Sucursales SUC ON VEN.idSucursal = SUC.idSucursal and INV.idSucursal = SUC.idSucursal
WHERE CONVERT(varchar, VEN.Fecha, 112) between CONVERT(varchar, isnull(@FD, VEN.Fecha), 112) and CONVERT(varchar, isnull(@FH, VEN.Fecha),112)
AND (VEN.idSucursal BETWEEN ISNULL(@SucursalDesde,VEN.idSucursal)
AND ISNULL(@SucursalHasta,VEN.idSucursal))
and VEN.Cod_Rubro = isnull(@Rubro , VEN.Cod_Rubro)
AND (VEN.Cod_Art = isnull(@Item,VEN.Cod_Art))
--and VEN.Cantidad <> 0
GROUP BY ART.Cod_Art, ART.descItem, SUC.Nombre--, Ven.cantidad--, CAST(cast(year(VEN.Fecha) as varchar) + '-' + cast(month(VEN.Fecha) as varchar) + '-01' AS datetime)
having SUM(ven.cantidad) <>0
)
t1 left join
( select C.Cod_Art, SUM(C.Cantidad) AS CantidadTotalVend
FROM CueVentas C
WHERE CONVERT(varchar, C.Fecha, 112) between CONVERT(varchar, isnull(@FD, C.Fecha), 112) and CONVERT(varchar, isnull(@FH, C.Fecha),112)
AND (C. IdSucursal BETWEEN ISNULL(@SucursalDesde,C. IdSucursal) AND ISNULL(@SucursalHasta,C. IdSucursal))
and C.Cod_Rubro = isnull(@Rubro , C.Cod_Rubro) AND (C.Cod_Art = isnull(@Item,C.Cod_Art))
GROUP BY C.Cod_Art
)
T2 ON T1.Articulo = T2.Cod_Art
GO
Un abrazo y espero que hayas entendido y espero tu respuesta a la brevedad
Yo lo que quiero hacer con este SP es seleccionar por ejemplo del articulo 1111 el total de todas las ventas en todas las sucursales es decir:
Articulo descripcion precio suc cantvendida canttotalvendida
1111 jean 15 1 25 100
1111 jean 15 2 25 100
1111 jean 15 3 25 100
1111 jean 15 4 25 100
2222 camisa 75 1 25 25
Entonces por eso arme la subconsulta, para que una vez que me trajo la cantidadtotalvendida, yo pueda ordenerlo por el criterio de más vendido.
Te dejo el Store Procedure:
CREATE proc RankingStock_Nuevo
@FD as DATETIME = '2009/08/01',
@FH as DATETIME = '2009/08/08',
@SucursalDesde as int = null,
@SucursalHasta as int = null,
@Rubro as varchar(3) = null,
@Item as varchar(6) = null,
@Diferencia as money = null
AS
while len(@Rubro) < 3
begin
set @Rubro = '0' + @Rubro
end
while len(@Item) < 6
begin
set @Item = '0' + @Item
end
print @FD
print @FH
select Articulo, Descripcion, Nombre, CantidadVendida, CantidadStock, Precio, CantidadTotalVend
(
SELECT ART.Cod_Art AS Articulo, isnull(ART.descItem, '- Articulo no cargado -') AS Descripcion, SUC.Nombre as Nombre,
SUM(VEN. Cantidad) AS CantidadVendida, max(INV. Cantidad) as CantidadStock, max(VEN. PrecioUnitario) as Precio
FROM CueVentas VEN LEFT JOIN
(SELECT descItem, Cod_Art
FROM vw_Items
GROUP BY descItem, Cod_Art) ART ON VEN.Cod_Art = ART.Cod_Art COLLATE SQL_Latin1_General_CP1_CI_AS
INNER JOIN Inventario INV ON VEN.Cod_Art = INV.CodArt
INNER JOIN Sucursales SUC ON VEN.idSucursal = SUC.idSucursal and INV.idSucursal = SUC.idSucursal
WHERE CONVERT(varchar, VEN.Fecha, 112) between CONVERT(varchar, isnull(@FD, VEN.Fecha), 112) and CONVERT(varchar, isnull(@FH, VEN.Fecha),112)
AND (VEN.idSucursal BETWEEN ISNULL(@SucursalDesde,VEN.idSucursal)
AND ISNULL(@SucursalHasta,VEN.idSucursal))
and VEN.Cod_Rubro = isnull(@Rubro , VEN.Cod_Rubro)
AND (VEN.Cod_Art = isnull(@Item,VEN.Cod_Art))
--and VEN.Cantidad <> 0
GROUP BY ART.Cod_Art, ART.descItem, SUC.Nombre--, Ven.cantidad--, CAST(cast(year(VEN.Fecha) as varchar) + '-' + cast(month(VEN.Fecha) as varchar) + '-01' AS datetime)
having SUM(ven.cantidad) <>0
)
t1 left join
( select C.Cod_Art, SUM(C.Cantidad) AS CantidadTotalVend
FROM CueVentas C
WHERE CONVERT(varchar, C.Fecha, 112) between CONVERT(varchar, isnull(@FD, C.Fecha), 112) and CONVERT(varchar, isnull(@FH, C.Fecha),112)
AND (C. IdSucursal BETWEEN ISNULL(@SucursalDesde,C. IdSucursal) AND ISNULL(@SucursalHasta,C. IdSucursal))
and C.Cod_Rubro = isnull(@Rubro , C.Cod_Rubro) AND (C.Cod_Art = isnull(@Item,C.Cod_Art))
GROUP BY C.Cod_Art
)
T2 ON T1.Articulo = T2.Cod_Art
GO
Un abrazo y espero que hayas entendido y espero tu respuesta a la brevedad
1 respuesta
Respuesta de brownsea
1