Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2012
erasmorc erasmorc is offline
Miembro
 
Registrado: ago 2004
Posts: 66
Poder: 20
erasmorc Va por buen camino
Antiguedad de saldos en sql 30,60,90, mas

Hola a todos.

Estoy usando sql 2005 y necesito hacer un query que me presente las facturas de los clientes que estan por cobrar segun la cantidad de dias, es decir para clasificarlos segun su antiguedad, sumando todos los montos por cobrar de un mismo cliente a 30 dias, 60 dias, 90 dias o mas dias. Por ejemplo si el cliente X debe 3 facturas desde hace 30 dias esos tres montos debe ser sumados y colocados en la columna de 30 dias del query y si ese mismo clientes tienes otras facturas con mas dias que estos montos sean presentados en la columna correspondiente, todo en una misma linea y asi para todos los clientes.

Este es el query que estoy usando
selectCodigoCliente,sum(totalfactura)TotalFactura,
casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 0 and 30 thenTotalFacturaend'1-30',casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 31 and 60 thenTotalFacturaend'31-60',casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 61 and 90 thenTotalFacturaend'61-90',casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 91 and 9999 thenTotalFacturaend'91 o Mas'fromencfactura
whereyear(fechafactura)= 2012
groupbyCodigoCliente,
casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 0 and 30 thenTotalFacturaend,casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 31 and 60 thenTotalFacturaend,casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 61 and 90 thenTotalFacturaend,casewhendatediff(d,fechafactura,'13/06/2012')BETWEEN 91 and 9999 thenTotalFacturaendorderbyCodigoCliente

El resultado que estoy obtenidon con este query es el siguiente:
CodigoCliente | TotalFactura | 1-30 | 31-60 | 61-90 | 91 o Mas
392 | 47500.00 | 0.00 | 0.00 | 0.00 | 47500.00
392 | 1425.00 | 0.00 | 0.00 | 1425.00 | 0.00
392 | 79520.00 | 0.00 | 0.00 | 79520.00 | 0.00


Si se fijan el cliente 392 tiene dos montos en el rango de 61-90, estos dos rangos en lugar de aparecer en lineas separadas deberian estan sumados en una misma linea. El resultado que deseo obtener es el siguiente:

CodigoCliente | TotalFactura | 1-30 | 31-60 | 61-90 | 91 o Mas
392 | 128445.00 | 0.00 | 0.00 | 80945.00 | 47500.00


De forma tal que me muestre en una misma linea los montos acumulados segun en rango de dias por cliente para cada rango y asi para todos los clientes.

Agradecere cualquier ayuda que me puedan prestar.




Responder Con Cita
  #2  
Antiguo 16-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡¡¡Pero qué feria es esa!!!, ahí no se puede ver nada

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 16-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola erasmorc.

Compaginé tu código en este mensaje, por que como está en el primero es imposible de leer para quién no sea un criptógrafo avezado.
Código SQL [-]
select CodigoCliente, sum(totalfactura) TotalFactura,
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN  0 and 30 then TotalFacturaend '1-30',
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN 31 and 60 then TotalFacturaend '31-60',
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN 61 and 90 then TotalFacturaend '61-90',
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN 91 and 9999 then TotalFactura '91 o Mas'
  end
from encfactura
where year(fechafactura)= 2012
group by CodigoCliente,
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN  0 and 30 then Total Facturaend,
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN 31 and 60 then TotalFacturaend,
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN 61 and 90 then TotalFacturaend,
  case when datediff(d,fechafactura,'13/06/2012') BETWEEN 91 and 9999 then TotalFactura
  end
order by CodigoCliente
Si me equivoqué en algo al transcribir, hazmelo saber y lo corrigo.

Es por eso que insistimos tanto con las etiquetas...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 17-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, no eres ningún novato, intenta escribir correctamente tus mensajes, lo que has publicado (además de no tener ningún dato correcto) es otra "feria" peor que la que pusiste en el primer mensaje, que descuadra incluso la presentación en pantalla.
Te lo recuerdo otra vez:



Gracias
Responder Con Cita
  #5  
Antiguo 18-06-2012
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 20
abelg Va por buen camino
Hola espero esto te ayude, la tabla temporal es solo para simular los datos

Código SQL [-]
create table #encfactura (
  CodigoCliente int,
  fechafactura datetime,
  totalfactura money
)

insert into #encfactura Values(392, '2012-05-22', 47500.00)
insert into #encfactura Values(392, '2012-05-13', 1425.00)
insert into #encfactura Values(392, '2012-02-14', 79520.00)

Declare @fecha datetime = '2012-06-13'

select CodigoCliente, sum(totalfactura) TotalFactura,
  SUM(case when datediff(d,fechafactura,@fecha) BETWEEN  0 and 30 then TotalFactura end) [1-30],
  SUM(case when datediff(d,fechafactura,@fecha) BETWEEN 31 and 60 then TotalFactura end) [31-60],
  SUM(case when datediff(d,fechafactura,@fecha) BETWEEN 61 and 90 then TotalFactura end) [61-90],
  SUM(case when datediff(d,fechafactura,@fecha) BETWEEN 91 and 9999 then TotalFactura end) [91 o Mas]
from #encfactura
where year(fechafactura)= 2012
group by CodigoCliente
order by CodigoCliente

drop table #encfactura
salu2
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
Consulta Por Antiguedad Jvilomar MS SQL Server 1 07-05-2008 15:17:28
Pedidos con un mes de antiguedad ¿¿¿cómo??? !!!!!!!! david_uh SQL 5 06-08-2007 05:54:30
Antigüedad de Saldos AzidRain SQL 2 27-01-2006 15:16:50
Saldos parciales Juanito-Kun SQL 3 26-08-2005 20:31:29
Consulta SQL de saldos FlacoNet SQL 2 13-06-2003 06:20:37


La franja horaria es GMT +2. Ahora son las 01:33:37.


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