
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.

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.

Valora esta pregunta


0