SQL - Consulta para expertos de SQL

   
Vista:

Consulta para expertos de SQL

Publicado por Omar (3 intervenciones) el 17/02/2016 20:47:36
Buenas tardes compañeros, tengo la complicada tarea de hacer un reporte en crystal reports, a base de consultas SQL, pero existe un problema que yo creo ustedes me podran ayudar a resolverlo....

Tengo 2 tipos de Tablas:

Una donde están resumidos los pagos de los clientes y otra donde estan los productos que paga.

Lo complicado del asunto es que son muchos los datos por tal motivo para mayor control, se realizan una tabla por cada mes de de pagos, tanto de resumen y de descripcion.

Aparte de este "incombeniente" existe otro, que el cliente puede pagar con meses de retraso el credito que tenia, por ejemplo: en mayo tubo que haber pagado por 150 productos, pero lo pago hasta diciembre, y en diciembre pago la diferencia que le falto en junio y julio, y lo de diciembre lo pago hasta marzo del año siguiente, por lo que hay dos fechas representada en meses, mes que paga y cuando lo paga.


entonces tenemos una base de datos de la sigiente forma:

ResPag012001 (resumen de los pagos hechos en enero)
ResPag022001 (resumen de los pagos hechos en febrero)
ResPag032001 (resumen de los pagos hechos en marzo)
ResPag042001 (resumen de los pagos hechos en abril)
ResPag052001 (resumen de los pagos hechos en mayo)
......
......
.....
asi hasta llegar a
ResPag122001 (resumen de los pagos hechos en diciembre)



DetPag012001 (detalle de los pagos hechos en enero)
DetPag022001 (detalle de los pagos hechos en febrero)
DetPag032001 (detalle de los pagos hechos en Marzo)
.......
.......
.......
DetPag122001 (detalle de los pagos hechos en Diciembre)


Necesito saber cuantos fueron los productos que pago en el año 2001, el cliente N° 0125614.

Si lo hago manual así quedaría:

Primero busco los pagos que realizo en las tablas resumen, por lo que hagio la siguiente consulta:

Select * from ResPag012001 where Cliente = 'C0125614'
Select * from ResPag022001 where Cliente = 'C0125614'
Select * from ResPag032001 where Cliente = 'C0125614'
....
....
....
Select * from ResPag122001 where Cliente = 'C0125614'


Con lo cual me trae:
Cliente | Importe | mes del pago | periodo que paga | clave del pago |
C0125614 $999999 012001 012001 P56242
C0125614 $899999 022001 012001 P42361
C0125614 $100000 032001 022001 P56875
C0125614 $999999 122001 032001 P68752
C0125614 $999999 022002 042001 P63458


Con lo cual ya puedo saber en cuales tablas de detalle buscar, y evitar saturar el sistema buscando en todas las tablas.....

DetPag012001
DetPag022001
DetPag032001
DetPag122001
DetPag022002

Select * from DetPag012001 where Clave_Pago='P56242'
y asi sucesivamente.

Si esto lo hago en excel, pues primero busco en la tabla de resumen y con los resultados realizo las consultas para buscar en las tablas de detalle, pero ahora quiero realizar las consultas a partir de los resultados del primer paso en una sola consulta, sin necesidad de construir las formulas en excel.......

Alguien me podría ayudar por favor..........
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Consulta para expertos de SQL

Publicado por Isaias (690 intervenciones) el 18/02/2016 17:11:00
Primero, veo un error en el modela de la base de datos, Segundo, ¿En que motor de base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta para expertos de SQL

Publicado por OMAR (3 intervenciones) el 18/02/2016 22:19:03
ESTA EN SQL.... Y EL MODELO DE LA BASE DE DATOS ES COMPLICADO YA QUE LOS REGISTROS SON DEMACIADOS... Y CONCENTRARLOS EN UNA SOLA TABLA SERIA IMPOSIBLE.... TENGO RECPILADO 5 AÑOS Y MI BASE YA PESA MAS DE 100 GB ASI QUE, AUNQUE LA ESTRUCTURA NO SEA LA MAS CORRECTA SI ES LA MAS FACTIBLE.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta para expertos de SQL

Publicado por leonardo_josue (877 intervenciones) el 18/02/2016 23:25:31
Hola Omar:

Mucho ojo, SQL no es un motor de Base de Datos, es un lenguaje de consultas... cuando se te pregunta con qué motor estás trabajando esperamos que digas algo como SQL Server, Oracle, MySQL, PosteSQL, SQLite y un largo etc. y no solo eso, sino que además deberías de decirnos con qué versión/edición estás trabajando.

ahora bien, coincido con Isaias el decir que tienes un mal modelo de tablas, el tamaño de la BD's en realidad no importa, en donde trabajo tenemos tablas con millones de registros en tablas sin ningún problema... luego entonces que digas que es imposible tener la información en una sola tabla no necesariamente es verdad.

puedes implementar hacer UNION's para no tener que manejar tantas consultas, si es que la estructura de tus tablas es la misma, pero esto puede hacer que el desempeño de tu servidor se vea afectado. de entrada creo que es lo único que podrías hacer para mejorar en algo lo que haces sin hacer cambios al modelo de BD's.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Consulta para expertos de SQL

Publicado por Isaias (690 intervenciones) el 19/02/2016 20:18:40
Complementando lo que te dice Leonardo, podrías también pensar en hacer VISTAS (si tu manejador cuenta con este modelo) indizadas para "juntar" tus tablas dispersas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta para expertos de SQL

Publicado por omar (3 intervenciones) el 26/02/2016 17:17:20
hola buen día:

Gracias Isaías y Josué de darse el tiempo de contestar mi duda, una disculpa por mi ignorancia, mi motor es SQL Server, voy a comenzar hacer un programa en Visual Basic .NET para manejar la base de datos, pero como ya es necesario procesar la información pues trabajo directamente en el SQL Server Management Studio.... Por lo que me comenta Josué, ya había probado anteriormente concentrar algunas tablas en una sola pero no recuerdo porque me retracte de hacerlo......

Pero viendo sus opiniones lo volveré a probar y en la brevedad les muestro los resultados...

Primero probare concentrar en una tabla maestra cada clase de tabla que tengo, y según el resultado, probare a realizar vistas....

Gracias compañeros y Dios me los bendiga.
Sigan ayudando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar