SQL - Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

 
Vista:

Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

Publicado por yeran (4 intervenciones) el 10/11/2011 21:31:44
Hola a todos
Necesito ayuda en una consulta SQL que quiero realizar. Tengo un diseño de base de datos donde uso el patron de modelado Entidad - Atributo - Valor, de esta forma puedo almacenar diferentes objetos con diferentes atributos. Pongo las relaciones implicadas en el problema:

Empleado (id, nombre, numdpto);
AtributoEmpleado (id, nombreAtributo, idempleado);
Valor (id, valorEntero, valorDouble, valorChar, idatributo, idempledo)

El problema esta en cuando quiero listar los datos de un empleado, por ejemplo devolver todos los dato del empleado Pedro.
Como puedo realizar una consulta que me liste todos los atributos de pedro con sus valores respectivos?
Como puedo hacer para que el resultado de esa consulta se muestre de forma horizontal, y no vertical, o sea que los atributos sean los nombres de las columnas y no de las filas?
Me explico mejor, una consulta normal tendria un resultado asi:

nombreAtributo valorEntero
atributo 1 23
atributo 2 32


como haria para que se muestre de esta manera:
atributo 1 atributo 2
23 32

Espero explicarme en mi duda. Muchas Gracias por cualquier ayuda que me puedan brindar.
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

Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

Publicado por Carlos Cuye (11 intervenciones) el 11/11/2011 00:56:03
Parte de tu consulta la veo similar a la siguiente:

http://www.lawebdelprogramador.com/foros/SQL/1278392-Consulta_de_dos_tablas_sin_concatenar.html

Suponiendo que uses 3 tablas : Empleados, Atributos, Valores
podrías usar las siguientes condiciones:

WHERE Empleados.Id_Emp=Atributos.Id_Emp AND
Empleados.Id_Emp=Valores.Id_Emp AND
Atributos.Id_Atrib=Valores.Id_Atrib

Te sugiero que uses los mismos nombres de campos cuando se refieran a la misma clave que relaciona tablas entre sí.
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

Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

Publicado por yeran (4 intervenciones) el 11/11/2011 15:44:31
hola Carlos, muchas gracias por responder y por las referencias que me dio, no sabia que los gestores manejaran funciones de ese tipo, que permiten concatenar varios resultados. Lamentablemente no me resuelve el problema, creo que no supe explicar bien mi problema.
Siguiendo el mismo ejemplo del post anterior:
Tengo las siguientes relaciones:
Empleado (id, nombre, numdpto);
AtributoEmpleado (id, nombreAtributo, idempleado);
Valor (id, valorEntero, valorDouble, valorChar, idatributo, idempledo)

Quiero devolver todos los dato del empleado Pedro.
La consulta normal seria realizar Inner Join entre las tablas Empleado para conocer los atributos del empleado y luego otro Inner Join con la tabla valor para conocer los valores de esos atributos. Pero en la tabla Valor los mismos se organizan de acuerdo al tipo de datos, entonces tendria un resulta similar a este:

nombreAtributo valorEntero valorChar
atributo 1 12 hola mundo
atributo 2 21 hello world
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

Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

Publicado por yeran (4 intervenciones) el 11/11/2011 15:57:58
Disculpa, no termine la idea en el post anterior
hola Carlos, muchas gracias por responder y por las referencias que me dio, no sabia que los gestores manejaran funciones de ese tipo, que permiten concatenar varios resultados. Lamentablemente no me resuelve el problema, creo que no supe explicar bien mi problema.
Siguiendo el mismo ejemplo del post anterior:

Tengo las siguientes relaciones:
Empleado (id, nombre, numdpto);
AtributoEmpleado (id, nombreAtributo, idempleado);
Valor (id, valorEntero, valorDouble, valorChar, idatributo, idempledo)

Quiero devolver todos los dato del empleado Pedro.
La consulta normal seria realizar Inner Join entre las tablas Empleado para conocer los atributos del empleado y luego otro Inner Join con la tabla valor para conocer los valores de esos atributos. Pero en la tabla Valor los mismos se organizan de acuerdo al tipo de datos, entonces tendria un resultado similar a este:

nombreAtributo valorEntero valorChar
atributo 1 12 null
atributo 2 null hello world

Ahora, el resultado que yo quiero obtener es el siguiente:

atributo 1 atributo 2
12 hello word

Hay alguna forma de hacer esto?. Muchas gracias Carlos por el tiempo dedicado a este problema mio.
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

Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

Publicado por leonardo_josue (1173 intervenciones) el 11/11/2011 17:04:17
Hola yeran:

No nos mencionas qué motor de BD estás utilizando, por lo que es complicado darte una respuesta puntual. Si entendí correctamente cuál es tu problema, lo que quieres hacer es que tus renglones cambien a columnas correcto??? algunos manejadores de BD tienen el concepto de TABLAS PIVOTE. Checa estas páginas:

http://technet.microsoft.com/es-es/library/ms177410.aspx
http://luauf.com/2008/05/26/trasponer-tabla-en-oracle-con-clausula-pivot/

Sería cuestión que investigues si la BD que estás utilizando soporta este tipo de consultas o si poseé alguna técnica para simular estas funciones.

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

Ayuda Consulta SQL sobre patron Entidad-Atributo-Valor

Publicado por yeran (4 intervenciones) el 12/11/2011 15:17:35
Hola Leo
5 puntos por tu respuestas, eso mismo es lo que necesitaba hacer. Yo trabajo con Postgres como gestor, el tiene las funciones tablefunc que me permiten hacer el PIVOT. Muchas Gracias por tu respuesta, me sirvio de mucho.

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