Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-01-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 19-01-2007
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 19-01-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 20-01-2007
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
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

Última edición por sinalocarlos fecha: 20-01-2007 a las 00:19:19.
Responder Con Cita
  #5  
Antiguo 22-01-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Habrá que pagar canon por un libro prestado? marcoszorrilla Noticias 1 06-07-2006 17:15:01
Linux podría verse obligado a pagar a Microsoft por el uso de FAT Sasuke_Cub Noticias 7 14-01-2006 18:59:27
A mi me parece bien lo de pagar Canon marcoszorrilla Noticias 3 05-07-2005 14:18:41
¿Pagar con el DEDO? marcoszorrilla Noticias 3 21-03-2005 17:32:03
Siempre hay que pagar las deudas......... tcp_ip_es Humor 0 14-06-2004 16:08:04


La franja horaria es GMT +2. Ahora son las 00:06:18.


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
Copyright 1996-2007 Club Delphi