SQL - Fechas como nombre de columna.

 
Vista:

Fechas como nombre de columna.

Publicado por Ivonne (12 intervenciones) el 27/07/2010 23:22:21
Buenas tardes amigos de la wep, estoy elaborando un reporte en el que necesito que las fechas aparezcan como nombre de columna, alguien me puede apoyar con alguna idea de como realizarlo? Les pongo un ejemplo de como necesito que se visulice el reporte.

Fechas filtradas: 26/07/2010 al 28/07/2010

usuario 26julio 27julio 28julio total
ernesto 1 2 0 3
juan 15 15 2 32

Sin más por el momento le agradezco la ayuda de antemano..saludos.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Fechas como nombre de columna.

Publicado por Leonardo Josue (1173 intervenciones) el 28/07/2010 17:00:01
Buenos días Ivonne, en tu post no mencionas qué manejador de bd estás utilizando, ni pones tampoco la consulta que estás utilizando para generar tu reporte.

Te comento qué tú puedes asignarle cualquier nombre a tus campos mediante la utilización de los "alias"

Select
campo1 as usuario,
campo2 as 26julio,
campo3 as 27julio,
campo4 as 28julio,
campo5 as total
from tuTabla

Ahora bien, si necesitas también la consulta para hacer el reporte como tal, primero necesitarías definir cual es la estructura de la tabla de donde obtienes los datos, así como poner algunos datos de ejemplo.

Te dejo una liga con un post que contesté hace tiempo en donde pidían algo semejante a lo que estás solicitanto, igual y te puede servir como ejemplo.

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=89&texto=SQL&n1=565255&n2=0&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0

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

RE:Fechas como nombre de columna.

Publicado por Ivonne (12 intervenciones) el 28/07/2010 17:33:05
Antes que nada gracias por contestar y efectivamente revisando el foro llegue a la liga que me envias y me dio idea de como hacerlo, el detalle que tengo ahora y no me explico es que en mi pc de pruebas que tengo si sale el reporte a como se necesita al pasarlo a mi pc para consultarlo en la base de datos que esta en produccion me sale este mensaje: " La conversión del tipo de datos char a datetime produjo un valor datetime fuera de intervalo" esta parte es la que me esta ocasionando conflicto select left(convert(varchar,b.fec_movto,120),10) he intendo cambiar la conversion de la fecha a 103 y 112 y ya no me marca el error pero no me envia el valor al día de la semana que corresponde la fecha, envio la consulta que estoy realizando, por fas alguna idea para revisar..saludos.

declare @RptPaso table ( fechamovto datetime,StatusTarea varchar(40),fecha char(10),HoraInicio varchar(8),usuario varchar(100),
Id_Cnsc_Ruta int,
id_cnsc_tarea varchar(20),
id_cnsc_tareaactv varchar(20),desc_tipotarea varchar(60),
localidadOrigen varchar(20),sku varchar(10) ,
ddDesc_Ensamb varchar(100),FactorEmpaque int, PiezasSurtir int, CantCjasSurtidas int,
CantPzasSurtidas int,
anden varchar(4),HoraConfAnden varchar(8),EqSurtido varchar(50),turno varchar(15))


insert into @RptPaso

select left(convert(varchar,b.fec_movto,120),10),
--convert (char(8),b.fec_movto,112) ,
tstat.Desc_TareaStat ,
Convert(Char(10), b.fec_movto, 103) as fecha,
Convert(varchar, b.fec_movto, 8) as HoraInicio,
c.nombre+' '+c.apellido_paterno+' '+ c.apellido_materno [Usuario],
--gia.Id_Cnsc_Ruta,
tp.id_cnsc_ruta,
a.Id_Cnsc_Tarea,
b.Id_Cnsc_TareaActv,
d.Desc_TipoTarea,
pas.Cve_Pas +'-'+ld.Cve_Lado+'-'+convert(varchar(3),cl.Fondo_Localidad)+'-'+cl.Niv_Localidad [Localidad Origen],
e.id_num_skuorig as Sku,f.ddDesc_Ensamb,mat.piezascaja[Factor empaque],
b.cant_empaque [Piezas a surtir],
--case when bit_caja =1 then (b.Cant_EmpaquesSurtidos/mat.piezascaja) end [Cant.Cajas surtidas],
--case when mat.piezascaja > b.cant_empaque then b.Cant_EmpaquesSurtidos else 0 end [Cant.piezas surtidas],
(tp.cant_empaquesurtida / MAT.piezascaja ) [Cant.Cajas surtidas],
(tp.cant_empaquesurtida - ( ( tp.cant_empaquesurtida / MAT.piezascaja ) * MAT.piezascaja ) ) [Cant.piezas surtidas],
ad.cve_anden as Anden,
case when tstat.Id_Cnsc_TareaStat=4 then Convert(varchar, a.fec_movto, 8) else ' ' end [HoraConfAnden],
case when a.Bit_EquipoVoz=1 then 'Surtio por voz' else 'Surtio por RF' end [Tipo de equipo por el que surtio],
case when convert(char(5), b.fec_movto, 114) between '06:00' and '17:30'
then 'Matutino' else 'Nocturno' end [turno]
from tarea a join tareaactv b on a.Id_Cnsc_Tarea=b.Id_Cnsc_Tarea
left join camaralocalidad_s1 cl on b.Id_Localidadorigen=cl.Id_Num_Localidad
--join ptusuario c on b.UserId=c.Id_Usuario
join tipotarea d on a.Id_Cnsc_TipoTarea=d.Id_Cnsc_TipoTarea
join mat_equiv_d e on b.id_num_sku=e.id_num_sku
join descensamb f on b.id_num_sku=f.id_num_sku
left join pasillo pas on cl.Id_Num_Pasillo=pas.Id_Num_Pasillo
left join lado ld on pas.Id_Num_Pasillo=ld.Id_Num_Pasillo and ld.Id_Cnsc_Lado = cl.Id_Cnsc_Lado
join anden_s3 ad on a.Id_Localidaddestino=ad.id_num_localidad
join mat on b.id_num_sku=mat.id_num_sku
join tareastat tstat on a.id_cnsc_tareastat=tstat.Id_Cnsc_TareaStat
--join tarea_guia_e giae on giae.Id_Cnsc_Tarea=a.Id_Cnsc_Tarea
--join guia gia on gia.Id_Fol_Guia=giae.Id_Fol_Guia
join Tarea_PedtdaCod tp on b.id_cnsc_tarea=tp.id_cnsc_tarea
join ptusuario c on tp.Userid=c.Id_Usuario
and b.id_num_sku=tp.id_num_sku
--and b.userid=tp.userid--lo cancele porque en la taba tareaactv no se actualiza bien los datos
where
convert (char(8),b.fec_movto,112) between ('20100610') and ('20100613')
and b.id_fol_tarima is not NULL
and a.Id_Cnsc_Tareastat not in (5)
order by tp.userid,b.fec_movto asc--b.id_cnsc_tarea,b.Id_Cnsc_TareaActv asc
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Fechas como nombre de columna.

Publicado por Leonardo Josue (1173 intervenciones) el 29/07/2010 17:30:34
Hola de nuevo Ivonne, sigues sin mencionar qué manejador de base estás utilizando. por el tipo de sintaxis que estás utilizando puedo suponer que se trata de SQL Server, pero sería conveniente que lo aclararas.

En cuanto al post... el problema que comentas creo que se debe a la configuración de lenguaje que tienes en tu equipo (seguramente español) y en el equipo productivo (seguramente inglés), por eso son convenientes las conversiones en las fechas, ahora bien, veo que utilizas la función between para comparar, pero utilizando cadenas... lo cual hace que el comportamiento pueda no ser el esperado, ya que la comparación se realiza de acuerdo al orden alfabético de las cadenas.

creo que lo que tendrías que hacer es algo como esto:

convert(datetime(convert (varchar,b.fec_movto,103), 103) between
convert(datetime, '10/06/2010', 103) and
convert(datetime, '13/06/2010', 103)

ahora si, el campo b.fec_movto tiene un formato 103 y la función between tiene como argumento dos fechas también con el formato 103 por lo que debería funcionar.

Si continuas con problemas lo comentas en el foro para tratar de ayudarte.
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

RE:Fechas como nombre de columna.

Publicado por ivonne (12 intervenciones) el 29/07/2010 23:09:11
Buenas tardes Leo, el manejador es sql server 2005 la version de sql en mi pc de pruebas esta en ingles en mi pc igual esta en ingles pero en el servidor en el que se aloja la BD el sql server 2005 esta en español, desde mi pc me conectato a la BD que esta en el server ¿talvez sea eso verdad ,en que en el server esta en español?, converti la fecha a datetime como mencionas en la primea linea y con eso dejo de salir el mensaje de error pero continuaba el problema de que no me mostraba los valores en el día que correspondia como a mi compañera igual le estaba pasando el mismo problema me dijo que en lugar de poner que la semana empiece en Domigo que iniciara en sabado y con eso ya caen los valores en los días correctos. Es decir de esta manera:

Antes estaba así:

select usuario,

case when datepart(dw,fechamovto)=1 then sum(CantCjasSurtidas) + sum(CantPzasSurtidas) else 0 end [Domingo],
case when datepart(dw,fechamovto)=2 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Lunes],
case when datepart(dw,fechamovto)=3 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Martes],
case when datepart(dw,fechamovto)=4 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Miércoles],
case when datepart(dw,fechamovto)=5 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Jueves],
case when datepart(dw,fechamovto)=6 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Viernes],
case when datepart(dw,fechamovto)=7 then sum(CantCjasSurtidas) + sum(CantPzasSurtidas) else 0 end [Sabado],
sum(CantCjasSurtidas) as caja,sum(CantPzasSurtidas) as piezas
from @RptPaso
group by usuario,fechamovto

Quedó de esta manera:

select usuario,
case when datepart(dw,fechamovto)=7 then sum(CantCjasSurtidas) + sum(CantPzasSurtidas) else 0 end [Sabado],
case when datepart(dw,fechamovto)=1 then sum(CantCjasSurtidas) + sum(CantPzasSurtidas) else 0 end [Domingo],
case when datepart(dw,fechamovto)=2 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Lunes],
case when datepart(dw,fechamovto)=3 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Martes],
case when datepart(dw,fechamovto)=4 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Miércoles],
case when datepart(dw,fechamovto)=5 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Jueves],
case when datepart(dw,fechamovto)=6 then sum(CantCjasSurtidas)+ sum(CantPzasSurtidas) else 0 end [Viernes],
sum(CantCjasSurtidas) as caja,sum(CantPzasSurtidas) as piezas
from @RptPaso
group by usuario,fechamovto

Si vez algo extraño en la manera que lo deje por favor dimelo para mejorlo..saludos.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Fechas como nombre de columna.

Publicado por Leonardo Josue (1173 intervenciones) el 30/07/2010 16:17:06
Hola de nuevo Ivonne, me alegra que ya al fin encontraras una solución sólo te comento lo siguiente:

al utilizar el clasificador dw (day of week) tú puedes especificarle al manejador de BD cual día quieres que corresponda al cada número.

Checa en la ayuda de tu bd la instrucción SET DATEFIRST. Como manejas diferentes lenguajes en tus servidores es posible que en cada uno de ellos se tenga una configuración diferente. Si estás utilizando procedimientos almacenados puedes especificar desde un inicio esta propiedad, para que sin importar el manejador donde corras tu aplicación te arroje el mismo resultado.

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

RE:Fechas como nombre de columna.

Publicado por ivonne (12 intervenciones) el 30/07/2010 16:27:53
Hola Leo, gracias por tu comentario. Una consulta más lo que pasa que ahora el usuario me solicita que en lugar del día de la semana aparezcan la fecha que corresponde al día.Eso ando investigando ahorita ¿sabes si se puede realizar?..saludos.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Fechas como nombre de columna.

Publicado por Leonardo Josue (1173 intervenciones) el 30/07/2010 21:25:01
Hola Ivonne, mira, tengo entendido que los alias no pueden generarse dinámicamente, pero se me ocurre que armes la instrucción SQL como texto y al final la ejecutes, sería algo más o menos como esto:

declare @Alias1 varchar(20)
set @Alias1 = '[30-Julio-2010]'
declare @SQL varchar(1000)
set @SQL = 'select campo as ' + @Alias1 + ' from tabla '
exec (@SQL)

Con esto, tú puedes asignar el valor que quieras a la variable @Alias1. Espero que se haya entendido mi ejemplo y pues ojalá te sirva para resolver tu problema.

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

RE:Fechas como nombre de columna.

Publicado por ivonne (12 intervenciones) el 30/07/2010 22:55:09
Gracias leo, reviso lo que me dices...saludos.
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