Filas por columnas

21/11/2003 - 12:06 por David Juan | Informe spam
Hola a todos,

Quisiera saber si existe alguna instrucción o método en SQL Server2000 que
permita seleccionar resultados poniendo como nombre de columnas el valor
contenido en un campo.
Me explico: tengo una tabla en la que guardo los campos (datos) de
diferentes copntratos de este modo:
tb_Detalle(idCampo,idContrato,NombreCampo,ValorCampo)

Ejemplo de datos en esta tabla serían:
idCampo idContrato NombreCampo ValorCampo
1 1 nombre Juanjo
2 1 apellido Gómez
3 1 edad 25

(3 filas afectadas)

Bien, pues ahora quiero sacar todos los valores que existan para un
determinado contrato (p.ej: idContrato=1) en una misma fila, de este modo:
idContrato nombre apellido edad

1 Juanjo Gómez 25

He probado con este select, pero no da resultado:
SELECT idContrato,
(CASE WHEN NombreCampo='nombre' THEN ValorCampo END) as Nombre,
(CASE WHEN NombreCampo='apellido' THEN ValorCampo END) as Apellido,
(CASE WHEN NombreCampo='edad' THEN ValorCampo END) as Edad
FROM tb_Detalle WHERE idContrato=1

Sé que en Oracle existe una herramienta o instrucción (split me parece) que
ayuda a generar este tipo de resultados, pero desconozco si existe algo de
este tipo en SQLServer2000. Y por más que miro en el Libro de Ayuda, no
acabo de entender cómo poder hacerlo.

Bueno, espero no haberos aburrido mucho con mi problema (ha sido algo
extenso tal vez) pero gracias por leerlo e intentar ayudar.

Un saludo a todos!!
Capt. Huevo
 

Leer las respuestas

#1 Javier Loria
21/11/2003 - 12:23 | Informe spam
Hola:
Tal vez te sirve algo como esto:
/* Codigo SIN PROBAR */
SELECT N.IdContrato,
N.ValorCampo,
A.ValorCampo,
E.ValorCampo
FROM TB_Detalle AS N
JOIN TB_Detalle AS A
ON N.IdContrato=A.IdContrato
AND N.IdCampo=1
AND A.IdCampo=2
JOIN TB_Detalle AS E
ON N.IdContrato=E.IdContrato
AND E.IdCampo=3
/* Fin de Codigo SIN PROBAR */

Claro que este tipo de diseno de Tablas(donde mezclas DATA y METADATA) no
ayuda mucho.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
David Juan escribio:
Hola a todos,

Quisiera saber si existe alguna instrucción o método en SQL
Server2000 que permita seleccionar resultados poniendo como nombre de
columnas el valor contenido en un campo.
Me explico: tengo una tabla en la que guardo los campos (datos) de
diferentes copntratos de este modo:
tb_Detalle(idCampo,idContrato,NombreCampo,ValorCampo)

Ejemplo de datos en esta tabla serían:
idCampo idContrato NombreCampo ValorCampo
1 1 nombre Juanjo
2 1 apellido Gómez
3 1 edad 25

(3 filas afectadas)

Bien, pues ahora quiero sacar todos los valores que existan para un
determinado contrato (p.ej: idContrato=1) en una misma fila, de este
modo: idContrato nombre apellido edad

1 Juanjo Gómez 25

He probado con este select, pero no da resultado:
SELECT idContrato,
(CASE WHEN NombreCampo='nombre' THEN ValorCampo END) as
Nombre, (CASE WHEN NombreCampo='apellido' THEN ValorCampo
END) as Apellido, (CASE WHEN NombreCampo='edad' THEN
ValorCampo END) as Edad FROM tb_Detalle WHERE idContrato=1

Sé que en Oracle existe una herramienta o instrucción (split me
parece) que ayuda a generar este tipo de resultados, pero desconozco
si existe algo de este tipo en SQLServer2000. Y por más que miro en
el Libro de Ayuda, no acabo de entender cómo poder hacerlo.

Bueno, espero no haberos aburrido mucho con mi problema (ha sido algo
extenso tal vez) pero gracias por leerlo e intentar ayudar.

Un saludo a todos!!
Capt. Huevo

Preguntas similares