![]() |
Consulta para reportes
Hola a todos:
Mi consulta es la siguiente: Tengo una tabla cuya estructura es la siguiente: Idcliente detalle importe 1 concepto1 10 1 concepto2 20 1 concepto3 15 1 concepto4 30 2 concepto2 15 2 concepto3 25 y necesito poder mostrar (en pantalla o a través de un reporte) esta tabla como sigue: idcliente concepto1 concepto2 concepto3 concepto4 1 10 20 15 30 2 15 25 es decir, poder armarla en tiempo de ejecución. Estoy utilizando interbase como motor de base de datos. Desde ya muchas gracias. |
Probá con esta, pero creo que en tu ejemplo faltan otros campos necesarios para identificar una transaccion (ej. Nro. de Factura)
Select Tr.IdCliente as Cliente , (Select Sum(TD.Importe) From TransactionDetails TD Where TD.IdCliente= TR.IdCliente And TD.Item_Code = 1 ) As Codigo1 , (Select Sum(TD.Importe) From TransactionDetails TD Where TD.IdCliente = TR.IdCliente And TD.Item_Code = 2 ) As Codigo2 , (Select Sum(TD.Importe) From TransactionDetails TD Where TD.IdCliente = TR.IdCliente And TD.Item_Code = 3 ) As Codigo3 , (Select Sum(TD.Importe) From TransactionDetails TD Where TD.IdCliente = TR.IdCliente And TD.Item_Code = 4 ) As Codigo4 From TransactionDetails TR También podés reemplazar "And TD.Item_Code = 4 " por "And TD.Item_Code In (2,5)" y obtener en una columna la suma de varios conceptos. Suerte |
Te agradezco mucho por contestar. De todos modos creo que no fui muy claro en el ejemplo, en realidad es una sola tabla que necesito armarla en forma de matriz. la estructura que utilicé es a modo de ejemplo. No tengo que realizar ninguna operación solo acomodar los datos de otro modo.
idcliente..Detalle....... Numero 1...........concepto1.....10 1...........concepto2.....15 1...........concepton.....## 2...........Concepto1.....40 idcliente........Concepto1.......Concepto2.........concepto n 1....................10.................15.....................## 2....................40 * Los puntos los utilizo para tabular (soy nuevo y no se como hacerlo). la cantidad de registros no lo conozco, pueden ir de 1 a n para un mismo cliente, por eso es que necesito armar la consulta en tiempo de ejecución. Se que soy complicado, pero en fin. Muchisimas Gracias. |
En realidad el concepto de la consulta propuesta sirve para resolver este problema (se llaman consultas de referencias cruzadas).
Más o menos : Código:
select distinct Recorrido.IdCliente Saludos. |
NOTA : Recorrido y Concepto són alias de la Tabla en que están los datos (la he llamado Tabla).
|
muchas gracias. Lo pruebo y te aviso
|
Hola:
Yo como siempre metiendo la cuchara donde no me llaman. Para Oracle como BD no he podido hacer la consulta como la plantea Marc, en esta situación existe una función decode cuya sintaxis es algo así como: decode(ELCAMPO, ValorEnCampo,Resultado) en donde si ValorEnCampo es verdadero regresa Resultado. Siguiendo la lógica de la consulta tenemos: select a.idcliente, sum(decode(detalle,'Concepto1',Numero)) as concepto1, sum(decode(detalle,'Concepto2',Numero)) as concepto2, ... sum(decode(detalle, 'Concepton', numero) as concepton from cliente a group by a.idcliente que es otra manera de hacerlo y me gustaría me dijeran si hay una función similar en otros motores de BD, por ejemplo IB. Espero sirva de algo como complemento y saludos a todos ;) |
Lo propuesto por Carmelo y Marc funciona de maravilla, Muchas Gracias. Una pequeña cansulta: Tengo algun limite en la cantidad de caracteres que puedo incluir en una consulta?, teniendo en cuenta que esta dependerá de la cantidad de registros que tenga por cada idcliente
|
Supongo que será un límite impuesto por cada servidor SQL. En teoría, cualquier servidor "serio" debiera aceptarte consultas bastante grandes... se me ocurre que un límite teórico "normal" debiera ser 65535 caracteres... pero es mejor leer la documentación al respecto de tu motor.
Hasta luego. ;) |
La franja horaria es GMT +2. Ahora son las 00:11:51. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi