SQL - Consulta en sql server, problema tabla asociativa

 
Vista:
sin imagen de perfil

Consulta en sql server, problema tabla asociativa

Publicado por adrian (2 intervenciones) el 22/02/2016 11:42:52
Buenos días a todos/as, mi problema es el siguiente, tengo tres tablas "Laboratori", "Ordre_treball" y "AssociarLaboratori". Laboratori y ordre_treball son las tablas principales y entre ellas hay una cardinalidad de muchos a muchos por lo que necesito una tabla asociativa, en este caso es la tabla "AssociarLaboratori". La cuestión es que cuando a un pedido le asigno varios laboratorios, tengo una consulta que debe mostrar todas las filas que existen en la tabla pedido (tengan o no un laboratorio asignado, si no tienen se mostrara en blanco), pero me encuentro con el problema que cuando quiero mostrar todos los pedidos, me muestra duplicados en todos aquellos pedidos que tienen mas de un laboratorio asignado. Por lo tanto si un pedido esta asignado a 4 laboratorios, quiero que aparezca solo una vez con el laboratorio que tenga el atributo "actiu" a true de la tabla "associarLaboratori".

La consulta que tengo ahora misma es la siguiente:

SELECT TOP 100 PERCENT o.IDCLIENT, o.IDORDRE, e.IDESTAT, l.IDLABORATORI, c.NOMEMPRESA, o.NUMCOMANDA, e.DESCRIPCIO AS DescripEstat,
CONVERT(VARCHAR(10), o.DATA_ARRIBADA, 5) AS DATA_ARRIBADA, CONVERT(VARCHAR(10), o.DATA_SORTIDA_ESTIMADA, 5) AS DATA_SORTIDA_ESTIMADA,
l.DESCRIPCIO AS DescripLab
FROM dbo.ORDRE_TREBALL o INNER JOIN
dbo.CLIENT c ON o.IDCLIENT = c.IDCLIENT INNER JOIN
dbo.ESTAT e ON o.IDESTAT = e.IDESTAT LEFT OUTER JOIN
dbo.ASSOCIARLABORATORI al ON o.IDORDRE = al.IDORDRE LEFT OUTER JOIN
dbo.LABORATORI l ON al.IDLABORATORI = l.IDLABORATORI
ORDER BY o.DATA_SORTIDA_ESTIMADA



Espero haberme explicado bien, es algo complicado explicarlo, dejo una imagen para que quede mas claro. Mi gestor de base de datos es Sql server 2000, gracias.

ot
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
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta en sql server, problema tabla asociativa

Publicado por leonardo_josue (1173 intervenciones) el 22/02/2016 17:05:34
Hola Adrian:

No me queda muy clara la consulta, sin embargo, si entiendo bien lo que te hace falta es simplemente agregar la condición que mencionas en el JOIN a la tabla "associarLaboratori", es decir, en lugar de poner esto:

1
2
3
...
LEFT OUTER JOIN dbo.ASSOCIARLABORATORI al ON o.IDORDRE = al.IDORDRE
...

poner esto:

1
2
3
...
LEFT OUTER JOIN dbo.ASSOCIARLABORATORI al ON o.IDORDRE = al.IDORDRE  AND actiu = true
...

es decir, no hacer el JOIN sobre todos los registros, sino sólo sobre aquel que tiene el atributo en TRUE.

Haz la prueba y nos comentas, si continuas con problemas postea algunos datos de ejemplo de tus tablas y a partir de estos datos dinos qué es lo que esperas obtener como salida.

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
sin imagen de perfil

Consulta en sql server, problema tabla asociativa

Publicado por adrian (2 intervenciones) el 23/02/2016 09:49:18
Hola Leonardo, gracias por tu ayuda,

De acuerdo en este momento me devuelve solo aquella que esta con el actiu a true, pero el problema es que actiu NO es un valor not null, de manera que cuando hay 4 filas con 4 laboratorios distintos y ninguno esta con el atributo actiu a true, me devuelve 4 filas. Cuando pasa esto quiero que me devuelva 1fila con el laboratori a null o vacio, es decir necesito unir aquellas filas que tienen el mismo idOrdre de la tabla associarLaboratori y que estan con el valor actiu a false (poniendo en el campo laboratori un null o valor vacio), sin embargo si alguna de las filas tuviera un valor como actiu (mas de una sera imposible que tenga actiu a true, ya que lo controlo por código) quiero que devuelva esa fila.

Espero haberme explicado bien, gracias.
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