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 20-09-2012
MDante MDante is offline
Registrado
NULL
 
Registrado: sep 2012
Posts: 3
Poder: 0
MDante Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 20-09-2012
MDante MDante is offline
Registrado
NULL
 
Registrado: sep 2012
Posts: 3
Poder: 0
MDante Va por buen camino
Por cierto olvide poner el query que me devuelve unos y ceros jeje


Código Delphi [-]
select distinct 
    clavealumno as clave,
    count( registroentrada) as entrada,
    count( case when cast (entrada as date) = '10/01/2010' then 0 end ) as dia1,
    count( case when cast (entrada as date) = '10/02/2010' then 0 end ) as dia2,
    count( case when cast (entrada as date) = '10/03/2010' then 0 end ) as dia3,
    count( case when cast (entrada as date) = '10/04/2010' then 0 end ) as dia4,
    count( case when cast (entrada as date) = '10/05/2010' then 0 end ) as dia5,
    count( case when cast (entrada as date) = '10/06/2010' then 0 end ) as dia6,
    count( case when cast (entrada as date) = '10/07/2010' then 0 end ) as dia7,
    count( case when cast (entrada as date) = '10/08/2010' then 0 end ) as dia8,
    count( case when cast (entrada as date) = '10/09/2010' then 0 end ) as dia9,
    count( case when cast (entrada as date) = '10/10/2010' then 0 end ) as dia10,
    count( case when cast (entrada as date) = '10/11/2010' then 0 end ) as dia11,
    count( case when cast (entrada as date) = '10/12/2010' then 0 end ) as dia12,
    count( case when cast (entrada as date) = '10/13/2010' then 0 end ) as dia13,
    count( case when cast (entrada as date) = '10/14/2010' then 0 end ) as dia14,
    count( case when cast (entrada as date) = '10/15/2010' then 0 end ) as dia15
from asistencia
where 
   (
      (clavealumno < 400)
   and 
      (registroentrada between cast('10/1/2010'as date) and cast('10/15/2010' as date))
   )
group by clavealumno
order by 1
Responder Con Cita
  #3  
Antiguo 20-09-2012
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
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.

Código SQL [-]
select clavealumno as clave,
 max( case when extract(day from entrada) = 1 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 1" ,
 max( case when extract(day from entrada) = 2 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 2" ,
 max( case when extract(day from entrada) = 3 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 3" ,
 max( case when extract(day from entrada) = 4 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 4" ,
 max( case when extract(day from entrada) = 5 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 5" ,
 max( case when extract(day from entrada) = 6 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 6" ,
 max( case when extract(day from entrada) = 7 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 7" ,
 max( case when extract(day from entrada) = 8 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 8" ,
 max( case when extract(day from entrada) = 9 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 9" ,
 max( case when extract(day from entrada) = 10 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 10" ,
 max( case when extract(day from entrada) = 11 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 11" ,
 max( case when extract(day from entrada) = 12 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 12" ,
 max( case when extract(day from entrada) = 13 then cast(cast(entrada as time) as varchar(25)) else '00:00' end) as "DIA 13"

 from asistencia
where 
   (
      (clavealumno < 400)
   and 
      (registroentrada between cast('10/1/2010'as date) and cast('10/15/2010' as date))
   )
group by clavealumno

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 -
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
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


La franja horaria es GMT +2. Ahora son las 22:18:50.


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