Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta t-sql

Estas en el tema de Consulta t-sql en el foro de SQL Server en Foros del Web. Hola, Uso SQL Server 2005. Tengo una tabla como la sig: Fecha Nombre Valor ------------------------------------ 01 c1 50 01 c2 39 01 c3 47 02 ...
  #1 (permalink)  
Antiguo 24/06/2008, 15:25
 
Fecha de Ingreso: abril-2003
Mensajes: 66
Antigüedad: 21 años, 9 meses
Puntos: 0
Pregunta Consulta t-sql

Hola,

Uso SQL Server 2005. Tengo una tabla como la sig:

Fecha Nombre Valor
------------------------------------
01 c1 50
01 c2 39
01 c3 47
02 c1 49
02 c2 45
02 c3 52
03 c1 53
03 c2 48
03 c3 53


Es posible recuperar los datos de la siguiente manera?

Fecha c1 c2 c3
-------------------------------------------
01 50 39 47
02 49 45 52
03 53 48 53



Si alguien conoce elguna manera de hacerlo en SQL Server 2005, agradeceré mucho su ayuda.

Gracias. Saludos.

f.
  #2 (permalink)  
Antiguo 24/06/2008, 15:32
 
Fecha de Ingreso: abril-2003
Mensajes: 66
Antigüedad: 21 años, 9 meses
Puntos: 0
Pregunta Respuesta: Consulta t-sql

No se aprecian bien los datos en el mensaje anterior.

Espero ahora sean más claros:


DATOS ACTUALMENTE:

Fecha | Nombre | Valor
-----------------
01 | c1 | 50
01 | c2 | 39
01 | c3 | 47
02 | c1 | 49
02 | c2 | 45
02 | c3 | 52
03 | c1 | 53
03 | c2 | 48
03 | c3 | 53



RESULTADO REQUERIDO:

Fecha | c1 | c2 | c3
-----------------
01 | 50 | 39 | 47
02 | 49 | 45 | 52
03 | 53 | 48 | 53


Gracias.
  #3 (permalink)  
Antiguo 24/06/2008, 15:58
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 4 meses
Puntos: 39
Respuesta: Consulta t-sql

Algo asi puede ser:
Código:
select fecha,
  case when nombre='c1' then valor else '' end [c1],
  case when nombre='c2' then valor else '' end [c2],
  case when nombre='c3' then valor else '' end [c3]
from tabla
group by fecha
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #4 (permalink)  
Antiguo 24/06/2008, 18:34
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 20 años, 4 meses
Puntos: 6
Respuesta: Consulta t-sql

Te recomendaria que ubiques

"Creating Dynamic Cross-Tabs/Pivot Tables "

en google.

Link Externo
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #5 (permalink)  
Antiguo 25/06/2008, 08:05
 
Fecha de Ingreso: abril-2003
Mensajes: 66
Antigüedad: 21 años, 9 meses
Puntos: 0
Pregunta Respuesta: Consulta t-sql

Agradezco las sugerencias.

flaviovich, lo que sugieres me parece bien, sin embargo, al usarlo obtengo los siguientes resultados:

1) Uso indebido de nombre y valor en la lista de SELECT porque no son parte de una funcion aggregate o de la clausula group by.

2) Intentando corregir esto, agrego los campos en la clausula Grupo By (group by fecha, nombre, valor), se ejecuta pero el resultado es algo asi:

Fecha | c1 | c2 | c3
-----------------
01 | 50 | -- | --
01 | -- | 39 | --
01 | -- | -- | 47
02 | 49 | -- | --
02 | -- | 45 | --
02 | -- | -- | 52
03 | 53 | -- | --
03 | -- | 48 | --
03 | -- | -- | 53


Alguna sugerencia?

Muchas gracias de antemano.

Saludos.
  #6 (permalink)  
Antiguo 25/06/2008, 08:20
 
Fecha de Ingreso: abril-2003
Mensajes: 66
Antigüedad: 21 años, 9 meses
Puntos: 0
Respuesta: Consulta t-sql

Modifique la consulta de la sig manera y funciona:

select fecha,
SUM(case when nombre='c1' then valor else '' end [c1]),
SUM(case when nombre='c2' then valor else '' end [c2]),
SUM(case when nombre='c3' then valor else '' end [c3])
from tabla
group by fecha

Gracias por su ayuda. Seguire investigando al respecto.

Saludos.

f
  #7 (permalink)  
Antiguo 25/06/2008, 08:50
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 4 meses
Puntos: 39
Respuesta: Consulta t-sql

Bueno, si te funciona asi, entonces bien. Solo te recomendaria cambiar los apostrofes por el cero, ya que estas sumando.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 25/06/2008, 10:26
 
Fecha de Ingreso: abril-2003
Mensajes: 66
Antigüedad: 21 años, 9 meses
Puntos: 0
Respuesta: Consulta t-sql

Si, tienes razon, gracias; ese cambio lo hice desde un principio, olvide mencionarlo.

Saludos.
  #9 (permalink)  
Antiguo 26/06/2008, 10:13
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: Consulta t-sql

Bueno espero no llegar tarde, pero esto creo kreo ke es lo que realmente quieres, y es mucho mas facil, el PIVOT es super archi indispensable... jeje es muy interesante, y bueno ah... ojala te sirva bastante... probe y me dio buen resultado... ahi te va la consulta...
Cita:
CREATE TABLE #UNO
( fecha varchar(2),
nombre varchar(2),
valor numeric(19,2)
)

insert into #UNO (fecha, nombre, valor) values ('01','c1',50)
insert into #UNO (fecha, nombre, valor) values ('01','c2',39)
insert into #UNO (fecha, nombre, valor) values ('01','c3',47)
insert into #UNO (fecha, nombre, valor) values ('02','c1',49)
insert into #UNO (fecha, nombre, valor) values ('02','c2',45)
insert into #UNO (fecha, nombre, valor) values ('02','c3',52)
insert into #UNO (fecha, nombre, valor) values ('03','c1',53)
insert into #UNO (fecha, nombre, valor) values ('03','c2',48)
insert into #UNO (fecha, nombre, valor) values ('03','c3',53)

Select Fecha, [c1], [c2], [c3]
from ( Select
fecha, nombre, valor
from #UNO
)as k Pivot(sum(valor) FOR nombre in ([c1], [c2], [c3]))PB
Ejecutaloy me cuentas si es ke e slo que realmente deseas... si tienes alguna duda... pos responde :D Saludos...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:48.