Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2018
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Aqui le pegaste a una de las diferentes limitaciones de SQL. Es pesimo para generar columnas dinamicamente.

Hay una posibilidad y es utilizar LIST:

http://www.developeando.com/2009/02/...-function.html
__________________
El malabarista.
Responder Con Cita
  #2  
Antiguo 20-10-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
Aqui le pegaste a una de las diferentes limitaciones de SQL. Es pesimo para generar columnas dinamicamente.
Hay una posibilidad y es utilizar LIST:
http://www.developeando.com/2009/02/...-function.html
Acostumbro a dar un repaso a las cosas nuevas de cada versión y nunca había visto esa función
Responder Con Cita
  #3  
Antiguo 20-10-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Yo tampoco la conocía. Probaré a ver si me vale, pero no lo tengo muy claro porque por lo que veo genera una lista y me hacen falta columnas separadas para poder generar un informe (que no sé si lo había dicho). No obstante es una función muy interesante. Gracias.
Responder Con Cita
  #4  
Antiguo 20-10-2018
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El problema que tienes es que segun veo necesitas crear un numero indeterminado de columnas. No hay como hacer eso hasta donde yo si sin recurrir a stored procedures y programacion manual, generando tablas temporales (luego de hacer lo de LIST y examinar su contenido, luego generar columnas).

Podrias dar mas contexto? Me huele a que hay otro camino pero necesito mas informacion. Como realmente es el informe? Estas son las tablas de entrada? Es posible de predeterminar cuanto es el maximo posible de columnas?
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 22-10-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Vamos a ver. Así lo estoy mostrando ahora en pantalla con un TListView:

Ciñéndome a esta salida:
El número de columnas efectivamente no es fijo; es lo primero que calculo cuando voy a mostrarlo en pantalla para lo que ejecuto este query:
Código SQL [-]
SELECT DISTINCT A.Grupo3, B.Literal
FROM Estadistica A, Instalacion B
WHERE B.Etiqueta = 'Situacion' AND A.Grupo3 = B.Valor
ORDER BY 1, 2
Con este SELECT creo y bautizo las columnas del TListView.

Para rellenarlo uso dos querys. En el primero saco todas las combinaciones distintas Grupo2, Grupo1 y luego, cuando voy poniendo la información en el TListView para cada una de esas combinaciones busco los correspondientes valores de Dato1. Al ser en pantalla no hay ningún problema.

Pero una de las opciones que doy a los usuarios es imprimir ese TListView y, evidentemente, no puedo volcar directamente su contenido en el informe impreso. Por eso estaba buscando como generar ese tipo de querys. Y hacerlo con un stored procedure no me importa, pero el ejemplo que he encontrado no acabo de entederlo.

Última edición por Angel.Matilla fecha: 22-10-2018 a las 11:31:13.
Responder Con Cita
  #6  
Antiguo 22-10-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Vale. No sé que ha cambiado en la BB.DD. o en el query pero finalmente he conseguido lo que buscaba y creo que el único cambio que he hecho juraría que ya lo había probado. El query ha quedado así:
Código SQL [-]
WITH Pivote AS (SELECT Estadistica, Grupo1, Grupo2, Grupo3, Dato1 
                  FROM Estadistica 
                 WHERE SUBSTRING(Estadistica FROM 1 FOR 1) = :Estadistica)
SELECT DISTINCT A.Grupo1, A.Grupo2, D.Dato1, E.Dato1
  FROM Estadistica A
  LEFT JOIN Pivote D ON A.Estadistica = D.Estadistica AND A.Grupo1 = D.Grupo1 AND A.Grupo2 = D.Grupo2 AND D.Grupo3 = 3
  LEFT JOIN Pivote E ON A.Estadistica = E.Estadistica AND A.Grupo1 = E.Grupo1 AND A.Grupo2 = E.Grupo2 AND E.Grupo3 = 4
 WHERE SUBSTRING(A.Estadistica FROM 1 FOR 1) = :Estadistica  
 ORDER BY 1, 2
Me he llevado fuera el DISTINCT que había enla tabla temporal y ahora si me sale una única fila. Sólo queda mejorarlo ya que la salida no tiene una número fijo de columnas y para eso si que es muy intereante un STORED PROCEDURE.
Responder Con Cita
  #7  
Antiguo 22-10-2018
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Buenas,

tengo entendido, de cuando miré en su día la sentencia WITH , que no acaba de funcionar cuando el nº de columnas varía. Siempre debe ser fijo.

Si en tu caso no es así, no valdría.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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 dinamica CoCaInE Varios 4 31-07-2012 21:32:07
problemas con consulta dinamica oktubre Conexión con bases de datos 3 16-04-2011 23:52:18
Consulta de SQL Dinamica pmpisani Tablas planas 1 04-10-2007 17:05:57
Grilla dinamica walito Gráficos 1 09-06-2007 12:16:35
Consulta dinámica en procedimiento almacenado Ivanzinho Firebird e Interbase 2 24-10-2005 15:26:27


La franja horaria es GMT +2. Ahora son las 00:08:05.


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