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

consulta sql para obtener permisos de usuarios

Estas en el tema de consulta sql para obtener permisos de usuarios en el foro de SQL Server en Foros del Web. Estimados tengo un gran problema ya que nunca he sido bueno para el sql, no puedo resolver este problema que para ustedes es cosa básica, ...
  #1 (permalink)  
Antiguo 19/06/2012, 20:32
Avatar de BlueSkull  
Fecha de Ingreso: noviembre-2008
Ubicación: Chile
Mensajes: 504
Antigüedad: 16 años
Puntos: 4
consulta sql para obtener permisos de usuarios

Estimados tengo un gran problema ya que nunca he sido bueno para el sql, no puedo resolver este problema que para ustedes es cosa básica, necesito obtener los permisos de usuario para un sistema, el usuario puede tener permisos para 4 módulos o menos, tengo:

tbl_usuario: (pk)rut, user, pass, estado
tbl_accesomodulos: (pk)[id_modulo, rut], ingresar, modificar, eliminar
tbl_modulos: (pk) id_modulos, modulo, info

necesito desplegar esta info en un gridview de asp.net:

rut userpass estado modulo1 modulo2 modulo3

Espero me puedan ayudar gracias.
__________________
"Incluso las torres más altas empiezan en el suelo."
"Sé Ágil..."
StreamWriter
  #2 (permalink)  
Antiguo 20/06/2012, 07:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: consulta sql para obtener permisos de usuarios

pues es un join con las tablas por el campo en comun en este caso:

select rut,userpass,estado,modulos from tbl_usuario as t1
inner join tbl_accesomodulos as t2 on (t1.rud=t2.rut)
inner join tbl_modulos as t3 on (t2.id_modulo=t3.idmodulo)

asi te desplegaria el rut, pass, estado, y modulos que cuenta, ya que si lo quieres como el ejemplo que pusiste con los modulos como columnas, busca informacion sobre la funcion Pivot :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 20/06/2012, 22:00
Avatar de BlueSkull  
Fecha de Ingreso: noviembre-2008
Ubicación: Chile
Mensajes: 504
Antigüedad: 16 años
Puntos: 4
Respuesta: consulta sql para obtener permisos de usuarios

Estimado gracias por contestar, te cuento que ya había llegado a ese resultado incluso de otra forma pero no me sirve, estoy viendo eso del pivot pero no me entra en la cabeza no lo entiendo, si tu lo sabes dame una manito o si alguien mas sabe una ayudita porfa.


Cita:
Iniciado por Libras Ver Mensaje
pues es un join con las tablas por el campo en comun en este caso:

select rut,userpass,estado,modulos from tbl_usuario as t1
inner join tbl_accesomodulos as t2 on (t1.rud=t2.rut)
inner join tbl_modulos as t3 on (t2.id_modulo=t3.idmodulo)

asi te desplegaria el rut, pass, estado, y modulos que cuenta, ya que si lo quieres como el ejemplo que pusiste con los modulos como columnas, busca informacion sobre la funcion Pivot :)

Saludos!
__________________
"Incluso las torres más altas empiezan en el suelo."
"Sé Ágil..."
StreamWriter
  #4 (permalink)  
Antiguo 21/06/2012, 07:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: consulta sql para obtener permisos de usuarios

Aqui un ejemplo de pivot tables:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. pointid INT,
  4. lanid INT,
  5. thelabel VARCHAR(30),
  6. datatime datetime,
  7. datavalue VARCHAR(10),
  8. theunits VARCHAR(10),
  9. Expr1 VARCHAR(10)
  10. )
  11.  
  12.  
  13.  
  14. INSERT INTO #temp VALUES (580,8,'Hotel Columbus','10/07/2011 11:00','49,21','DegC','TEP01')
  15. INSERT INTO #temp VALUES (581,9,'Hotel Columbus2','10/08/2011 11:00','49,21','DegC2','TEP02')
  16. INSERT INTO #temp VALUES (581,9,'Hotel Columbus3','10/08/2011 11:00','49,21','DegC2','TEP03')
  17.  
  18. SELECT * FROM #temp
  19.  
  20. SELECT pointid,lanid,thelabel,datatime,datavalue,theunits,[TEP01],[TEP02],[TEP03]
  21. FROM
  22. (
  23.    SELECT Expr1,pointid,lanid,thelabel,datatime,datavalue,theunits FROM #temp
  24. ) AS SOURCE
  25. pivot
  26. (
  27.   MAX(Expr1) FOR Expr1 IN ([TEP01],[TEP02],[TEP03])
  28. ) AS pvt

Si te fijas en el primer select el normal despliega la informacion en filas(resultados para tepo1,tepo2 y tepo3) y en el segundo usando pivot tables lo despliega en columnas :), basate en este ejemplo para obtener lo que necesitas, si observas bien veras y leeras(en internet) que la tabla pivote necesita una funcion de agregado para poder ser usada(en este caso max para que no afecte el resultado).

Mas ejemplos:

http://blogs.msdn.com/b/spike/archiv...le-sample.aspx

http://blog.sqlauthority.com/2008/05...table-example/

http://geeks.ms/blogs/ozonicco/archi...rver-2005.aspx

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 21/06/2012, 19:53
Avatar de BlueSkull  
Fecha de Ingreso: noviembre-2008
Ubicación: Chile
Mensajes: 504
Antigüedad: 16 años
Puntos: 4
Respuesta: consulta sql para obtener permisos de usuarios

Estimado gracias por contestar, tu ejemplo me sirvió 100% y los ejemplos que me enviaste igual, mi consulta que quedo casi igual a la que me enviaste pero tengo un problema, todos los primeros datos están bien menos los módulos (me aparecen todos en null) esta es mi consulta:

Cita:
SELECT RUT, USERNAME, PASS, TIPO, ESTADO, [M1], [M2], [M3]
FROM
(

SELECT USUARIO.RUT_PERSONAL AS RUT, USUARIO.USERNAME AS USERNAME, USUARIO.PASSWORD AS PASS, USUARIO.TIPO_USUARIO AS TIPO, USUARIO.ACTIVO AS ESTADO, MODULOS.MODULO AS MODULOS
FROM USUARIO
INNER JOIN ACCESOMODULOS ON USUARIO.RUT_PERSONAL = ACCESOMODULOS.RUT_PERSONAL
INNER JOIN MODULOS ON ACCESOMODULOS.ID_MODULO = MODULOS.ID_MODULO

)AS FUENTE
PIVOT
(
MAX(MODULOS) FOR MODULOS IN ([M1], [M2], [M3])
)AS PVT
Espero me puedas ayudar a sacar este problema gracias.



Cita:
Iniciado por Libras Ver Mensaje
Aqui un ejemplo de pivot tables:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. pointid INT,
  4. lanid INT,
  5. thelabel VARCHAR(30),
  6. datatime datetime,
  7. datavalue VARCHAR(10),
  8. theunits VARCHAR(10),
  9. Expr1 VARCHAR(10)
  10. )
  11.  
  12.  
  13.  
  14. INSERT INTO #temp VALUES (580,8,'Hotel Columbus','10/07/2011 11:00','49,21','DegC','TEP01')
  15. INSERT INTO #temp VALUES (581,9,'Hotel Columbus2','10/08/2011 11:00','49,21','DegC2','TEP02')
  16. INSERT INTO #temp VALUES (581,9,'Hotel Columbus3','10/08/2011 11:00','49,21','DegC2','TEP03')
  17.  
  18. SELECT * FROM #temp
  19.  
  20. SELECT pointid,lanid,thelabel,datatime,datavalue,theunits,[TEP01],[TEP02],[TEP03]
  21. FROM
  22. (
  23.    SELECT Expr1,pointid,lanid,thelabel,datatime,datavalue,theunits FROM #temp
  24. ) AS SOURCE
  25. pivot
  26. (
  27.   MAX(Expr1) FOR Expr1 IN ([TEP01],[TEP02],[TEP03])
  28. ) AS pvt

Si te fijas en el primer select el normal despliega la informacion en filas(resultados para tepo1,tepo2 y tepo3) y en el segundo usando pivot tables lo despliega en columnas :), basate en este ejemplo para obtener lo que necesitas, si observas bien veras y leeras(en internet) que la tabla pivote necesita una funcion de agregado para poder ser usada(en este caso max para que no afecte el resultado).

Mas ejemplos:

http://blogs.msdn.com/b/spike/archiv...le-sample.aspx

http://blog.sqlauthority.com/2008/05...table-example/

http://geeks.ms/blogs/ozonicco/archi...rver-2005.aspx

Saludos!
__________________
"Incluso las torres más altas empiezan en el suelo."
"Sé Ágil..."
StreamWriter
  #6 (permalink)  
Antiguo 22/06/2012, 07:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: consulta sql para obtener permisos de usuarios

Si te fijas los resultados que te regresa tu consulta son los que tienes que tener en la expresion del pivote, si tu query regresa los modulos como M1,M2,M3 entonces ahi que revisar los datos para ver porque vienen nulos.

Saludidos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: sql
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




La zona horaria es GMT -6. Ahora son las 13:56.