Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Edad de las cuentas por pagar (https://www.clubdelphi.com/foros/showthread.php?t=39439)

efelix 19-01-2007 18:02:20

Edad de las cuentas por pagar
 
Hola a todos, disculpen por el titulo del hilo pero no encontré otro. Tengo el siguiente procedimiento almacenado:
Código SQL [-]
CREATE PROCEDURE spSaldo 
AS
SELECT     Proveedores.IdProveedor, Proveedores.NombreProveedor, Facturas.IdFactura, Facturas.Descripcion, Facturas.Importe, Facturas.FechaRecepcion, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Saldo, CASE WHEN DATEDIFF(day, 
                      FechaRecepcion, GETDATE()) > 0  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 30 THEN DATEDIFF(day, FechaRecepcion, GETDATE()) ELSE 0 END MENOSDE30dias,
                    CASE WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 31  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 60 THEN DATEDIFF(day, FechaRecepcion, GETDATE()) ELSE 0 END ENTRE3060dias,
                    CASE WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 61  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 90 THEN DATEDIFF(day, FechaRecepcion, GETDATE()) ELSE 0 END ENTRE6090dias,
                   CASE WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 91 THEN DATEDIFF(day, FechaRecepcion, GETDATE()) ELSE 0 END MASDE90dias 
FROM         Proveedores INNER JOIN Facturas ON Proveedores.IdProveedor=Facturas.IdProveedor
WHERE     (Aplicada = 0)
GO
El mismo proviene de la unión de dos tablas, Proveedores y Facturas. Que deseo con él. Que me de el importe de las facturas por rango de edades, es decir entre 0 y 30 el Importe total de las que están en ese rango, entre 31 y 60 el importe total de las que están en ese rango y así sucesivamente, para luego utilizar esto en Reporte en delphi 7. Cuando ejecuto este procedimiento almacenado no me sale nada de lo esperado. Mi pregunta es la siguiente como utilizar el campo importe de la tabla factura en la expresión que aparece en la consulta para lograr lo que deseo. Espero me hayan entendido. Muchas gracias.

sinalocarlos 19-01-2007 21:16:49

Código SQL [-] CREATE PROCEDURE spSaldo AS SELECT Proveedores.IdProveedor, Proveedores.NombreProveedor, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Saldo, CASE WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 0 AND DATEDIFF(day, FechaRecepcion, GETDATE()) <= 30 THEN 1 --0 A 30 DIAS WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) >= 31 AND DATEDIFF(day, FechaRecepcion, GETDATE()) < 60 THEN 2 --31 A 60 DIAS WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) >= 61 AND DATEDIFF(day, FechaRecepcion, GETDATE()) < 90 THEN 3 --61 A 90 DIAS WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) >= 91 THEN 4 -- MAS DE 90 ELSE 0 END vida, --POR SI ACASO SUM(Facturas.importe) as SumaImporte -- SUMA DEL IMPORTE FROM Proveedores INNER JOIN Facturas ON Proveedores.IdProveedor=Facturas.IdProveedor WHERE (Aplicada = 0) GROUP BY VIDA GO


esto es lo que creo que seria, agrupado por proveedor y vida de las facturas, si añades campos de las facturas entonces no te agruparia estas ultimas y la suma no seria valida

efelix 19-01-2007 23:22:56

Gracias sinalocarlos, pero esto megenera un error en el nombre del campo vida, disculpa mi ignorancia, alo mejor lo estás utilizando a manera de ejemplo, en este preciso ejemplo a que campo te refieres específicamente. Te ereítero las gracias.

sinalocarlos 20-01-2007 00:06:04

Código SQL [-]

CREATE PROCEDURE spSaldo 
AS
SELECT     
Proveedores.IdProveedor, 
Proveedores.NombreProveedor, 
Facturas.IdFactura, 
Facturas.Descripcion, 
Facturas.Importe, 
Facturas.FechaRecepcion, 
DATEDIFF(day, FechaRecepcion, GETDATE()) AS Saldo, 

CASE WHEN 
DATEDIFF(day, FechaRecepcion, GETDATE()) > 0  
AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 30 THEN 1 WHEN
DATEDIFF(day, FechaRecepcion, GETDATE()) > 31  
AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 60 THEN 2 WHEN
DATEDIFF(day, FechaRecepcion, GETDATE()) > 61  
AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 90 THEN 3 WHEN
DATEDIFF(day, FechaRecepcion, GETDATE()) > 91 THEN 4 
ELSE 0 END as vida,
SUM(Facturas.importe) as SumaImporte

FROM         Proveedores INNER JOIN Facturas ON Proveedores.IdProveedor=Facturas.IdProveedor
WHERE     (Aplicada = 0)
GO

ups jeje es cierto por confiado no lo modifique directamente aqui y postie sin compilar

quearia asi

efelix 22-01-2007 15:33:46

Hola sinalocarlos, muchas gracias por tu ayuda. Te cuento que ya resolví el probelma y logré lo que quería de la siguiente forma:
Código SQL [-]
CREATE PROCEDURE spAntiguedad 

AS
SELECT     Proveedores.IdProveedor, Proveedores.NombreProveedor, Facturas.IdFactura, Facturas.Descripcion, Facturas.Importe, Facturas.FechaRecepcion, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Saldo, 
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 0  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) <= 30 THEN Facturas.Importe ELSE 0 END MENOSDE30dias,
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE ()) >= 31  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) <= 60 THEN Facturas.Importe  ELSE 0 END ENTRE3060dias,
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) >= 61  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) <= 90 THEN Facturas.Importe ELSE 0 END ENTRE6090dias,
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 91 THEN Facturas.Importe ELSE 0 END MASDE90dias 
FROM         Proveedores INNER JOIN Facturas ON Proveedores.IdProveedor=Facturas.IdProveedor
WHERE     (Aplicada = 0)
GO
Es decir ahora obtengo el importe por cada rango de edad que establecí, que era lo que me faltaba, el problema estaba cuando yo ponía then DATEDIFF(day,FechaRecepcion, GETDATE()) en vez de poner el campo Importe.
Gracias.


La franja horaria es GMT +2. Ahora son las 04:53:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi