Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Select filtrar filas repetidas en tabla derivada

Estas en el tema de Select filtrar filas repetidas en tabla derivada en el foro de SQL Server en Foros del Web. Hola, Tengo este script de sql que se encuentra dentro de una vista que cree. El resultado que tira se repiten el campo cuenta en ...
  #1 (permalink)  
Antiguo 01/10/2009, 19:08
Avatar de fechasoru  
Fecha de Ingreso: diciembre-2008
Mensajes: 149
Antigüedad: 15 años, 4 meses
Puntos: 0
Select filtrar filas repetidas en tabla derivada

Hola, Tengo este script de sql que se encuentra dentro de una vista que cree.

El resultado que tira se repiten el campo cuenta en varias filas, todos los demas columnas son distintas, o sea que nunca van aparecer filas iguales.

Necesito sobre la vista que me aparesca la primera fila del grupo por cuenta pero nose como implementarlo.



--Script Sql que realiza un reporte de las cuentas y cuotas de la empresa

SELECT Cuenta,Cuota,denominacion, cant_cuotas,t_cuotas_pagadas,fecha_pago, valor_cuota, importe_abonado, t_f_venc, importe_total, importe_cobrado, saldo, Pagado,
Cliente, [Fecha Vto], id_cobrador, Cobrador
FROM (SELECT i.id_cuenta AS Cuenta, i.id_cuota AS Cuota, pl.denominacion,i_1.cantidad AS cant_cuotas,t_cuo_pag.t_cuotas_pagadas,i.fecha_pag o, i.valor_cuota,
i.importe_abonado,t_cuo_pag.t_f_venc, i.importe_total, t_cuo_pag.t_cuotas_pagadas * i.valor_cuota AS importe_cobrado,
i.importe_total - i.valor_cuota * t_cuo_pag.t_cuotas_pagadas AS saldo, CASE WHEN i.marca_pagado = 1 THEN 'Si' ELSE 'No' END AS Pagado, i.Cliente,
i.fecha_vencimiento AS [Fecha Vto], i.id_cobrador, i.Cobrador
FROM (SELECT cuo.id_cuenta, cuo.id_cuota, cue.id_plan_cuota, cue.valor_cuota, cue.valor_cuota * cuo.marca_pagado AS importe_abonado,
cue.importe_total, cue.saldo, cuo.marca_pagado, cl.apellido_nombre AS Cliente, cuo.fecha_vencimiento, cuo.fecha_pago,
co.id_cobrador, co.apellido_nombre AS Cobrador
FROM dbo.Cuenta AS cue INNER JOIN
dbo.Cuotas AS cuo ON cue.id_cuenta = cuo.id_cuenta INNER JOIN
dbo.Cliente AS cl ON cue.id_cliente = cl.id_cliente LEFT OUTER JOIN
dbo.Cobrador AS co ON cue.id_cobrador = co.id_cobrador) AS i INNER JOIN
--Cuenta las cantidades de cuotas que tiene la cuenta
(SELECT dbo.Cuotas.id_cuenta,COUNT(*)AS cantidad
FROM dbo.Cuotas INNER JOIN
dbo.Cuenta ON dbo.Cuotas.id_cuenta = dbo.Cuenta.id_cuenta
GROUP BY dbo.Cuotas.id_cuenta) AS i_1 ON i.id_cuenta = i_1.id_cuenta INNER JOIN
--Cuenta las cuotas pagadas y busca la ultima fecha vencimiento de la cuota ultima
(SELECT id_cuenta, COUNT(id_cuenta) AS t_cuotas_pagadas, MAX(fecha_vencimiento) AS t_f_venc
FROM dbo.Cuotas AS a_cuo
WHERE (marca_pagado = 'true')
GROUP BY id_cuenta) AS t_cuo_pag ON i.id_cuenta = t_cuo_pag.id_cuenta INNER JOIN
dbo.PlanCuotas AS pl ON i.id_plan_cuota = pl.id_plan_cuota) AS p

order by p.Cuenta desc,p.Cuota
--Referencias de campos
--t_f_venc = representa la fecha de vencimiento de la ultima cuota pagada
--cant_cuotas representa el numero de cuotas que tiene la cuenta
--t_cuotas_pagadas representa el numeros de cuotas pagadas que tiene la cuenta
--importe_cobrado = representa el importe que se va pagando de la cuenta
--importe_abonado= representa el importe abonado del mes , es igual al valor de la cuota salvo cuando no se abona que es cero
__________________
Looking for a terrific Persistence Layer and Business Objects system for Microsoft.NET? our blog for more details.

http://www.entityspaces.net
  #2 (permalink)  
Antiguo 02/10/2009, 09:13
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Select filtrar filas repetidas en tabla derivada

Un primer paso que yo haría, meter el resultado de esa consulta en una tabla "temporal" y posteriormente analizar esa tabla, aunque no es recomendable el uso de tablas temporales, te queda un código má limpio y fácil de depurar.

Para meter el resultado en una tabla temporal haces lo siguiente:
Código:
Select Campo1, Campo2, .. CampoN
INTO #TablaTemp
From ... 

-----------------
SELECT * FROM   #TablaTemp

DROP TABLE  #TablaTemp
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:42.