malditaaa consulta! se podra?

10/02/2005 - 01:40 por Jerry Valdez | Informe spam
Bueno despues de andar navegando de foro en foro me
mandaron a este y pues espero humildemente su ayuda
muchachos no quiero perder mas pelo!! :)

He aqui el problema:
Estamos desarrollando un sistema en linea para el manejo
de documentos entre oficinas y departamentos de la
empresa en que trabajamos y tenemos un gran problemon
para poder definir la entrega de los documentos a los
usuarios..para que se me entienda mejor aqui esta
la estrucutra ahorita de la
tabla oficio_detalle donde se crea un registro por cada
uno de los usuarios que selecciono en una ruta de
documento-

oficio usuario permiso orden estado fecha estatus_doc
1 20 1 1 1 2005-02-21 0

2 11 1 1 1 2005-02-10 1
2 20 0 2 1 2005-02-11 0
2 21 0 3 1 2005-02-11 0

3 21 1 1 1 2005-02-10 0
3 11 0 1 1 2005-02-10 0

4 20 0 1 1 2005-02-10 0

5 20 1 1 0 2005-02-15 0
5 11 0 2 0 2005-02-15 0

6 23 0 1 0 2005-02-15 0

lo que quiero es que al "loguearse" el usuario vea sus
documentos tanto revisados como los que le faltan por
revisar (eso lo determino en estatus_doc 1 para revisado
y 0 para falta revision, y en permiso un 0 para los que
son de entrega normal y un 1 para los que son entregados
para su revision y despues de ser aprobados entregados al
destinatario inmediato en el orden) pero para que un
usuario, que tenga el orden 2 (o X sig) en la "ruta del
documento" a revisar, pueda "verlo" en su bandeja es
necesario que el usuario con el orden inmediato anterior
lo haya revisado (estatus_doc=1) pero puede darse el caso
que el documento se envie a diferentes usuarios y con un
mismo orden definido (ejemplo un memorandum que va para
aqui y alla y todos tienen orden 1)
un ejemplo se loguea el usuario 11 y deberia de ver en su
bandeja los siguientes registros
el oficio 1(porque es el unico)
el oficio 2(ya lo reviso)
el oficio 3(porque es para 2 usuarios pero ambos tienen
el orden 1)

y no deberia de ver:
el oficio 4 (porque no le corresponde verlo)
el oficio 5 (no ha sido revisado por el primer usuario
en el orden)
el oficio 6 (porque no le corresponde verlo)

he logrado obtener muchos resultados pero nunca el que
necesito, ahorita recupero los registros en los
cuales "X" usuario es el primero en el orden siempre y
cuando no haya
revisado (estatus_doc=0) a base de esta consulta:
SELECT * FROM oficios_detalle WHERE id_usuario ="usuario"
AND estatus_doc =0 GROUP BY id_oficio ASC

pero no es lo que necesito.
alguien podria ayudarme?
me faltan campos o que?
ojala y puedan hacerlo muchachos gracias!

Preguntas similare

Leer las respuestas

#1 MAXI
10/02/2005 - 02:20 | Informe spam
Hola, el 1 lo debe ver porque es el unico por mas que no este apuntado a ese
usuario?



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"Jerry Valdez" escribió en el mensaje
news:0af301c50f09$286cabe0$
Bueno despues de andar navegando de foro en foro me
mandaron a este y pues espero humildemente su ayuda
muchachos no quiero perder mas pelo!! :)

He aqui el problema:
Estamos desarrollando un sistema en linea para el manejo
de documentos entre oficinas y departamentos de la
empresa en que trabajamos y tenemos un gran problemon
para poder definir la entrega de los documentos a los
usuarios..para que se me entienda mejor aqui esta
la estrucutra ahorita de la
tabla oficio_detalle donde se crea un registro por cada
uno de los usuarios que selecciono en una ruta de
documento-

oficio usuario permiso orden estado fecha estatus_doc
1 20 1 1 1 2005-02-21 0

2 11 1 1 1 2005-02-10 1
2 20 0 2 1 2005-02-11 0
2 21 0 3 1 2005-02-11 0

3 21 1 1 1 2005-02-10 0
3 11 0 1 1 2005-02-10 0

4 20 0 1 1 2005-02-10 0

5 20 1 1 0 2005-02-15 0
5 11 0 2 0 2005-02-15 0

6 23 0 1 0 2005-02-15 0

lo que quiero es que al "loguearse" el usuario vea sus
documentos tanto revisados como los que le faltan por
revisar (eso lo determino en estatus_doc 1 para revisado
y 0 para falta revision, y en permiso un 0 para los que
son de entrega normal y un 1 para los que son entregados
para su revision y despues de ser aprobados entregados al
destinatario inmediato en el orden) pero para que un
usuario, que tenga el orden 2 (o X sig) en la "ruta del
documento" a revisar, pueda "verlo" en su bandeja es
necesario que el usuario con el orden inmediato anterior
lo haya revisado (estatus_doc=1) pero puede darse el caso
que el documento se envie a diferentes usuarios y con un
mismo orden definido (ejemplo un memorandum que va para
aqui y alla y todos tienen orden 1)
un ejemplo se loguea el usuario 11 y deberia de ver en su
bandeja los siguientes registros
el oficio 1(porque es el unico)
el oficio 2(ya lo reviso)
el oficio 3(porque es para 2 usuarios pero ambos tienen
el orden 1)

y no deberia de ver:
el oficio 4 (porque no le corresponde verlo)
el oficio 5 (no ha sido revisado por el primer usuario
en el orden)
el oficio 6 (porque no le corresponde verlo)

he logrado obtener muchos resultados pero nunca el que
necesito, ahorita recupero los registros en los
cuales "X" usuario es el primero en el orden siempre y
cuando no haya
revisado (estatus_doc=0) a base de esta consulta:
SELECT * FROM oficios_detalle WHERE id_usuario ="usuario"
AND estatus_doc =0 GROUP BY id_oficio ASC

pero no es lo que necesito.
alguien podria ayudarme?
me faltan campos o que?
ojala y puedan hacerlo muchachos gracias!


Respuesta Responder a este mensaje
#2 Jerry Valdez
10/02/2005 - 02:36 | Informe spam
Jajajajaja upps!
me equivoque al pegar los datos
no el 1 no lo debe de ver


podrias ayudarme?
aunque sea mencionando otra estrucutra de datos lo que
sea amigo!
generalmente no me desespero pero esta vez me he bloqueado
:(

gracias por contestar
Respuesta Responder a este mensaje
#3 MAXI
10/02/2005 - 03:25 | Informe spam
Hola, te arme un ejemplo, deberia funcionar bien :-S, cualquier cosa me
dices si?


CREATE TABLE #PEPE (oficio INT,usuario INT, permiso INT, orden INT, estado
INT,
fecha DATETIME,estatus_doc INT)

INSERT INTO #PEPE VALUES (1,20,1,1,1,'2005-02-21',0)

INSERT INTO #PEPE VALUES (2,11,1,1,1,'2005-02-10',1)


INSERT INTO #PEPE VALUES (2,20,0, 2, 1, '2005-02-11',0)


INSERT INTO #PEPE VALUES (2, 21, 0,3, 1, '2005-02-11',0)

INSERT INTO #PEPE VALUES (3, 21, 1,1, 1, '2005-02-10',0)


INSERT INTO #PEPE VALUES (3, 11, 0,1, 1, '2005-02-10' , 0)


INSERT INTO #PEPE VALUES (4, 20, 0,1, 1, '2005-02-10',0)

INSERT INTO #PEPE VALUES (5, 20, 1,1, 0, 2005-02-15,0)


INSERT INTO #PEPE VALUES (5, 11, 0,2, 0, '2005-02-15',0)

INSERT INTO #PEPE VALUES (6, 23, 0,1, 0, '2005-02-15',0)

SELECT PEPE.*,ISNULL(P.ANTERIOR,0), CASE WHEN ISNULL(P.ANTERIOR,0)=0 THEN 1
ELSE P.ESTADO END AS ESTADO_ANT
FROM #PEPE PEPE LEFT JOIN (SELECT OFICIO,ORDEN AS ANTERIOR,ORDEN,ESTADO FROM
#PEPE) P
ON P.OFICIO = PEPE.OFICIO AND P.ORDEN = PEPE.ORDEN - 1
WHERE USUARIO AND
CASE WHEN ISNULL(P.ANTERIOR,0)=0 THEN 1 ELSE P.ESTADO END = 1


==
Un abrazo y espero te sea de utilidad



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"Jerry Valdez" escribió en el mensaje
news:0b3901c50f10$e47f79a0$
Jajajajaja upps!
me equivoque al pegar los datos
no el 1 no lo debe de ver


podrias ayudarme?
aunque sea mencionando otra estrucutra de datos lo que
sea amigo!
generalmente no me desespero pero esta vez me he bloqueado
:(

gracias por contestar

Respuesta Responder a este mensaje
#4 Jerry Valdez
10/02/2005 - 15:28 | Informe spam
Muchas Gracias maxi!
excelente ejemplo gracias
ahora tengo que convertirla a mysql :(
porque aqui tienen servidores linux tambien y lo quieren
ver corriendo en los dos servers (que hueva) pero bueno
eso me imagino no lo obtendre en este grupo.muchas
gracias por todo...me has salvado la vida
date una vuelta por mexico y te invito unos tequilas :)
bye
Respuesta Responder a este mensaje
#5 Maxi
10/02/2005 - 15:42 | Informe spam
Hola, me alegro que te haya ayudado :-), lamento no poder hacerlo con Mysql
(la religion me lo prohibe ;))

pd: claroo cuando este por ese hermoso pais aceptare el tequi :-p

Un abrazo y te estaremos esperando para la proxima


Salu2
Maxi


"Jerry Valdez" escribió en el mensaje
news:0db201c50f7c$d87d2a50$
Muchas Gracias maxi!
excelente ejemplo gracias
ahora tengo que convertirla a mysql :(
porque aqui tienen servidores linux tambien y lo quieren
ver corriendo en los dos servers (que hueva) pero bueno
eso me imagino no lo obtendre en este grupo.muchas
gracias por todo...me has salvado la vida
date una vuelta por mexico y te invito unos tequilas :)
bye
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida