Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Antiguedad de saldos en sql 30,60,90, mas (https://www.clubdelphi.com/foros/showthread.php?t=79214)

erasmorc 15-06-2012 23:21:28

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.





Casimiro Notevi 16-06-2012 00:13:04

¡¡¡Pero qué feria es esa!!!, ahí no se puede ver nada :D

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



Gracias :)

ecfisa 16-06-2012 22:12:50

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.

Casimiro Notevi 17-06-2012 19:04:22

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 :)

abelg 18-06-2012 22:56:31

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


La franja horaria es GMT +2. Ahora son las 12:17:11.

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