ayuda con migracion consulta access a transact-sql

11/11/2004 - 17:25 por Battle Troll | Informe spam
saludos a todos

En access tenia mas o menos la siguiente consulta (simplificada):

SELECT [VENDEDOR],
date() AS Fecha,
DCount("VENTA","R_VENT","ESTATUS='P' AND VENDEDOR='" & [Vendedor] & "'")
AS TotalPedidosPendientes,
DCount("VENTA","R_VENT","ESTATUS='P' AND VENDEDOR='" & [Vendedor] & "'
AND PEDIDO=#" & format(date(),"yyyy/mm/dd") & "#") AS PedidosHoy

FROM VendedorActivo
WHERE Activo=True
ORDER BY [VENDEDOR];

Quiero hacer un procedimiento almacenado en SQL Serv. que haga lo mismo, e
intente con esto:

CREATE PROCEDURE Mi_Proc AS

DECLARE @DiaVenta SMALLDATETIME
SET @DiaVenta='2004-11-05'

SELECT
MiVendedor,
@DiaVenta as Fecha,

(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='P' AND
VENDEDOR=MiVendedor) AS TotalPedidosPendientes,
(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='P' AND VENDEDOR=MiVendedor
AND PEDIDO=@DiaVenta) AS PedidosHoy,

FROM
( SELECT VENDEDOR AS MiVendedor FROM VendedorActivo WHERE Activo=true ) A
ORDER BY MiVENDEDOR
GO


En otras palabras, quiero que me cuente el numero de pedidos totales y del
dia de hoy por vendedor... y no me deja...

Si este SP lo creo con parametros y desde el analizador de consultas le
mando como parametro la clave del vendedor que quiero me obtiene los
resultados correctos... solo para ese vendedor, y yo quiero que lo haga
para todos...

¿alguna sugerencia?

Preguntas similare

Leer las respuestas

#1 Isaias
11/11/2004 - 17:53 | Informe spam
Creo que.

/* Inicio de codigo */

CREATE PROCEDURE pr_MiProc
@DiaVenta SMALLDATETIME
AS

SET NOCOUNT ON

SELECT
MiVendedor,
@DiaVenta as Fecha,
VENDEDOR,
COUNT(VENTA) as Total
FROM R_VENT JOIN VendedorActivo ON R_VENT.MiVendedor = VendedorActivo.VENDEDOR
WHERE VendedorActivo.ESTATUS='P'
AND VendedorActivo.Activo = 1
ORDER BY MiVendedor

/* Fin de codigo */

Ejecuto:

EXEC pr_MiProc '2004-11-05'
Respuesta Responder a este mensaje
#2 Battle Troll
11/11/2004 - 18:16 | Informe spam
Buen intento, muchas gracias
Voy a probarlo, pero...

Sin embargo la ultima condicion no la puedo expresar asi... disculpenme
por no haber puesto toda la informacion desde el principio.

Tengo que hacer estas consultas dentro de la principal pues no solo quiero
contar las ventas que estan pagadas pero aun no facturadas, sino que
aparte tambien cuento las que ya fueron facturadas, y para darle una
vuelta de rosca mas, cuento a cuantos clientes distintos les ha vendido
este vendedor en los ultimos 60 dias naturales:

(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='P' AND
VENDEDOR=MiVendedor) AS
TotalPedidosPendientes,
(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='P' AND VENDEDOR=MiVendedor
AND PEDIDO=@DiaVenta)
AS PedidosHoy,
(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='F' AND VENDEDOR=MiVendedor
AND PEDIDO=@DiaVenta)
AS FacturasHoy,
(SELECT count(CLIENTE) FROM (SELECT CLIENTE FROM R_VENT WHERE
VENDEDOR=MiVendedor AND F_FACTURA>ÚTEADD( d, -60, @DiaVenta) AND
F_FACTURA<=@DiaVenta GROUP BY CLIENTE) t ) AS NumClientesAtendidos

Por ello es que hacia esto tan revuelto... ¿alguna idea?
Respuesta Responder a este mensaje
#3 Eva Etxebeste
12/11/2004 - 09:36 | Informe spam
Jelou :)

Prueba con algo como: (me invento la tabla vendedores, parto de ella para
poder enlazar después todas las demás consultas)

Select Vendedores.Vendedor , TotalPedidosPendientes.VentaPedidosPendientes,
PedidosHoy.VentaPedidosHoy, FacturasHoy.VentafacturasHoy,
NumClientesAtendidos.ClientesAtendidos

From Vendedores

LEFT JOIN

(SELECT Vendedor, COALESCE(Count(VENTA) ,0) as VentaPedidosPendientes
FROM R_VENT WHERE ESTATUS='P'
Group by Vendedor) AS TotalPedidosPendientes

ON Vendedores.Vendedor = TotalPedidosPendientes.Vendedor

LEFT JOIN

(SELECT Vendedor, COALESCE(Count(VENTA) ,0) as VentaPedidosHoy
FROM R_VENT
WHERE ESTATUS='P' And PEDIDO=@DiaVenta
Group by Vendedor) AS PedidosHoy


ON Vendedores.Vendedor = PedidosHoy.Vendedor

LEFT JOIN

(SELECT Vendedor, COALESCE(Count(VENTA),0) as VentaFacturasHoy
FROM R_VENT
WHERE ESTATUS='F' AND PEDIDO=@DiaVenta
Group by Vendedor) AS FacturasHoy

ON Vendedores.Vendedor = FACTURASHOY.Vendedor

LEFT JOIN

(SELECT Vendedor, COALESCE(count(CLIENTE),0) as ClientesAtendidos
FROM (SELECT CLIENTE FROM R_VENT WHERE FACTURA>ÚTEADD( d, -60, @DiaVenta)
AND F_FACTURA<=@DiaVenta
GROUP BY CLIENTE)
Group by Vendedor ) AS NumClientesAtendidos


ON Vendedores.Vendedor = NumClientesAtendidos.Vendedor

Después podrás filtrar el resultado y eliminar aquellos registros que no
aporten nada (todo ceros), por ejemplo

Ojo! Sin probar y hecha de rapidillo, la sintaxis puede estar de pena :(

Un saludo

Eva Etxebeste

"Battle Troll" escribió en el mensaje
news:
Buen intento, muchas gracias
Voy a probarlo, pero...

Sin embargo la ultima condicion no la puedo expresar asi... disculpenme
por no haber puesto toda la informacion desde el principio.

Tengo que hacer estas consultas dentro de la principal pues no solo quiero
contar las ventas que estan pagadas pero aun no facturadas, sino que
aparte tambien cuento las que ya fueron facturadas, y para darle una
vuelta de rosca mas, cuento a cuantos clientes distintos les ha vendido
este vendedor en los ultimos 60 dias naturales:

(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='P' AND
VENDEDOR=MiVendedor) AS
TotalPedidosPendientes,
(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='P' AND VENDEDOR=MiVendedor
AND PEDIDO=@DiaVenta)
AS PedidosHoy,
(SELECT Count(VENTA) FROM R_VENT WHERE ESTATUS='F' AND VENDEDOR=MiVendedor
AND PEDIDO=@DiaVenta)
AS FacturasHoy,
(SELECT count(CLIENTE) FROM (SELECT CLIENTE FROM R_VENT WHERE
VENDEDOR=MiVendedor AND F_FACTURA>ÚTEADD( d, -60, @DiaVenta) AND
F_FACTURA<=@DiaVenta GROUP BY CLIENTE) t ) AS NumClientesAtendidos

Por ello es que hacia esto tan revuelto... ¿alguna idea?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida