![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Trasnformadas, crosstab, pivot, referencias cruzadas ...
... o como quieras llamarlo.
Os dejo un documento que he escrito. No tengo para pasarlo a pdf, por lo que lo dejo a güevo. El documento explica qué son y explica un procedimiento almacenado que permite en base a unos parámetros extraer información de una tabla o vista o consulta haciendo la transposición de la información en base al campo que se indica para hacer de 'pivote'. Espero que le valga a alguien, a mi me ha servido. Si alguien además de serle útil termina el tema de los meses, por favor que lo publique. Espero vuestras opiniones. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - Última edición por fjcg02 fecha: 12-02-2009 a las 13:13:13. Razón: Aclarar contenido del documento |
#2
|
|||
|
|||
Que formato tiene el archivo comprimido, NO lo puedo leer.
Saludos |
#3
|
||||
|
||||
Formato ZIP. Acabo de abrirlo y me funciona.
SAludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#4
|
|||
|
|||
El ZIP no tiene problema, es el archivo que esta comprimido.
|
#5
|
|||
|
|||
Si lo abres con el Open Office lo exportas a PDF en un click
![]() |
#6
|
|||
|
|||
Otra solución..
Srs.
Propongo otra solución mas rápida y robusta (creo yo). Utilizo CTE (Common Table Expressions). Funciona para la versión 2.1 en adelante. Espero que sirva de algo... ![]() Saludos Gerardo Suárez Trejo |
#7
|
|||
|
|||
me parece muy bien ahh el sp
para tablas cruzadas yo utilizo un componente muy bueno q es de devexpress gracias por tu aporte
__________________
IVAND |
#8
|
||||
|
||||
Cita:
¿ Cómo pones las columnas siguientes sin modificar tu código ? USUARIO, UNO, DOS, TRES, CUATRO, CINCO Queda sin resolver el problema. Por otro lado hay componentes como los de devexpress y otros que te permiten hacerlo, incluso creo que fastreport también tiene un componente para generar listados de esta manera, pero bajo mi punto de vista, prefiero poner la información en pantalla y que el usuario laimprima cuando realmente lo necesite. Ahora, mi experiencia con ellos no ha sido muy buena - no me refiero al componente de devexpress ya que no lo conozco - . Ahora, esta solución es gratis y no necesitas soltar eurakos o dolares por delante. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#9
|
|||
|
|||
Consulta
Hola fjcg02 soy un novato en programación de bases de datos hace tiempo que busco resolver el problema de presentar información de esta manera
Código:
Clavealumno horaentrada diames1 diames2 diames3 diames4 hasta el dia 31 del X mes 1 8:30 am 8:25am 8:20am 8:50 am 9:28 am -----------------------> (TABLA = TESTING )( CAMPO_VISUALIZAR = NOMBRE)( CAMPO_PIVOTE = FECHA) (CONDICIONES = VACIO) y el resultado no importa que combinación de parámetros use el error siempre es: Engine Error (code = 335544569): Dynamic SQL Error. SQL error code = -206. Column unknown. TESTING. At line 2, column 21. SQL Error (code = -206): Column does not belong to referenced table aunque esto solo era para un proyectito para ganar algunos puntos en la escuela los cuales ya no me gane jeje me esta volviendo loco ya que dure varios días intentando resolver este problema, MS SQL ya lo hace pero me siento a un paso de lograrlo en firebird por eso sigo persistiendo. tambien he utilizado este tipo de query pero solo me devuelve valores 1 y 0 aunque si con una elegante tabla como yo necesito, esto es en la copia de la base de datos que nos da la escuela la cual tiene como estructura: TABLA ASISTENCIA COLUMNAS CLAVEALUMNO(INT) ENTRADA(TIMESTAMP) REGISTROENTRADA(TIMESTAMP)
ojala alguien mas que vea el tema aporte sus valiosos conocimientos para lograr hacer un query funcional ya que en ningún lado de la red alguien a compartido algo similar les dejo una copia de la tabla de la base de datos con información real de entre octubre de 2009 hasta octubre 2011 aprox sobre clave, horario de entrada y registroentrada https://skydrive.live.com/redir?resi...JwNTFW0rK0bA00 saludos Última edición por Casimiro Notevi fecha: 19-09-2012 a las 02:38:57. |
#10
|
||||
|
||||
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
![]() Recuerda poner los tags al código fuente, ejemplo: ![]() Gracias ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
||||
|
||||
Hola MDante,
vamos por partes porque estás confundiendo algunos términos... Piensa lo que estás haciendo... count "cuenta" las veces que aparece, por lo tanto, te saldrán como valores 1 ó cero, ya que son las veces que aparecen registros con esos datos. Entiendo que en tu tabla hay un registro por día. Si hay un registro por día te valdría sustituir el count por first o last, y supongo que te saldría el resultado que esperas, es decir, la hora de entrada de cada día. Respecto a la función que publiqué, le falta un parámetro, que es el campo a sumar. Supongo que es lo que está mal. Si no recuerdo mal, el procedimiento genera una sentencia sql. Haz pruebas y pon los parámetros de entrada y la sentencia que genera en cada caso, para que pueda analizarlas. A ver si puedo ponerte algo de luz en el asunto. Estamos en contacto. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#12
|
|||
|
|||
Primero que nada, gracias por tomarte la molestia de responder , en efecto el código que tu nos ofreces funciona perfectamente cuando hay campos a sumar lo único que me faltaba hacer era colocar los campos entre apostrofes , sin embargo yo no tengo ningún campo a sumar, aunque de todas formas me funciona de maravilla para otras cosas, por otra parte por supuesto que se que el valor devuelto de count es un valor nonull y debido a mi inexperiencia esperaba encontrar alguna sentencia en alguna parte de Internet que me devolviera el campo que necesito, que son las fechas en columnas, sin embargo también funciona como lista de asistencia, después de todo ese era el proyecto que tenia por encargo, desplegar en una lista las asistencias de los alumnos por cada día del mes, y ya que devuelve valores nonull, en las fechas donde no hay asistencia devuelve un cero y donde hay asistencia devuelve un hermoso 1 , me habría gustado mas que apareciera la hora por cada día, pero ya que no logro hacer eso ni con transform y pivot en MS SQL llegue a la conclusión de que mejor voy a desplegar la información reacomodandola mediante uso de matrices y después enviarlos a un dataset o un datatable ya que yo uso C# soy nuevo en rad studio y mi versión caducará pronto pero me encanto trabajar en rad studio cuando logre hacerlo prometo publicar un prototipo para quien quiera usarlo tanto en C# como en delphi.
Saludos y hasta pronto |
#13
|
|||
|
|||
Por cierto olvide poner el query que me devuelve unos y ceros jeje
|
#14
|
||||
|
||||
A ver, hombre de poca fe...
Vas a probar con esto, que significa básicamente lo siguiente... Cogeme las fechas de entrada de los alumnos y haces esto - si es el día uno, coges la hora y la conviertes a caracteres. Si no es día uno te quedas con el valor '00:00'. Te quedas con el valor más alto ( es decir, el que tenga un valor ). - Así para cada día. Además, me lo agrupas por alumno.
Lo pruebas, si funciona perfecto, pero te dejo de deberes que lo estudies y lo entiendas. Nos informas, majete. Saludos PD: A ver si te ganas esa buena nota, aunque sea tarde.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#15
|
||||
|
||||
Perdonad que retome este tema ya antiguo pero es que estaba tratando de solucionar precisamente ese problema y veo que ese procedimiento es más o menos la solución que me hace falta. He estado viéndolo y tengo una duda: ¿qué pasa si son dos los campos sobre los que hay que hacer el pivote?
Dicho de otra manera. Yo tengo esto en una tabla: ![]() Es evidente que la salida que necesito es esta: Código:
GRUPO1 GRUPO2 GRUPO3 DATO1 GRUPO3x DATO1x 12 3 3 7 4 246 |
#16
|
||||
|
||||
Hola,
de esto ha llovido mucho, pero dices que es evidente la salida que quieres. Yo no la veo tan evidente. Por eso te está costando tanto. Piensa un poco a ver si la solución que quieres implantar es la más conveniente. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#17
|
||||
|
||||
Yo sí la veo evidente, o al menos me lo parece. Vale: Lo que estoy mostrando son códigos pero al fin y al cabo da lo mismo poner el código que su equivalencia. Hay dos campos comunes en ambas filas, los valores de Grupo1 y Grupo2, y el resto de la información (las otras dos columnas) son las variables. Mi probelma viene en que no veo como implementar el el procedemiento para que sean esas dos columnas las que guíen el "pivote".
|
#18
|
||||
|
||||
La salida que monto en pantalla es esta:
![]() Este TListView lo monto con un query con el que saco el número de columnas necesarias (al margen, en este caso, de las dos primeras):
Luego busco todas las combinaciones distintas Grupo2, Grupo1: Con este query creo cada una de las líneas del TListView e incorporo la información de las dos primeras columnas. Luegop, para cada fila del mismo ejecuto este otro:
Y con el resultado del mismo voy poniendo la información en las columnas correspondientes. Lo que busco es lógicamente simplificar esta maraña de código. |
#19
|
||||
|
||||
Hola,
yo creo que es exactamente lo que necesitas lo que hace el procedimiento que escribí. Por un lado los campos por los que se agrupa. Por otro, los campos que van a dar las cabeceras. Luego el montaje con los valores. Creo que ahora lo he entendido. Sería más claro que pongas un juego de ensayo con más registros y mostrando la salida. También que en lugar de códigs pongas literales, que clarifica bastante más. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#20
|
||||
|
||||
Cita:
Cita:
|
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Referencias Cruzadas | GustavoCruz | Firebird e Interbase | 7 | 02-12-2008 23:14:25 |
Consulta de referencias cruzadas | victork_py | Firebird e Interbase | 5 | 18-06-2007 16:44:14 |
Consulta de referencias cruzadas | jzginez | Firebird e Interbase | 2 | 30-07-2004 04:38:25 |
consultas de referencias cruzadas | Manuela | SQL | 2 | 31-08-2003 22:24:55 |
Consultas de referencias cruzadas | Manuela | Impresión | 0 | 19-08-2003 21:50:43 |
![]() |
|