2012-12-17 164 views
0

我有以下查询,它正在工作,但我得到4列(3名同样的方式),因为我想要的只是获得两列的数据,“Entidad”和“Servicio”,但找不到做到这一点..SQL服务器复杂连接查询

SELECT 
    Entidades.nombre as entidad, 
    Servicios.nombre as servicio, 
    sp.nombre  as servicio, 
    sc.nombre  as servicio 
FROM 
    Entidades 

LEFT JOIN Banksphere 

    INNER JOIN Servicios 
    ON Banksphere.servicio_id = Servicios.id 

ON Entidades.id = Banksphere.entidad_id 

LEFT JOIN PAS 

    INNER JOIN Servicios sp 
    ON sp.id = 3 

ON Entidades.id = PAS.entidad_id 

LEFT JOIN CAM 

    INNER JOIN Servicios sc 
    ON sc.id = 0 

ON Entidades.id = CAM.entidad_id 
GROUP BY 
    Entidades.id, Entidades.nombre, Servicios.nombre, sp.nombre, sc.nombre 
ORDER BY 
    Entidades.id 

我得到的结构是这样的

Entidad  | Servicio | Servicio | Servicio 
Corporativo | Abacon | NULL  | CAM 
Corporativo | MCI  | NULL  | CAM 
Santander | Sales | PAS  | NULL 

但我想这...

Entidad  | Servicio 
Corporativo | Abacon 
Corporativo | MCI  
Corporativo | CAM 
Santander | Sales 
Santander | PAS 
+0

不同于论坛的网站,我们不使用的“谢谢”,或者“任何帮助表示赞赏”,或签名(因此)。请参阅“[应该'嗨','谢谢',标语和致敬从帖子中删除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be 。-removed - 从 - 个) –

回答

2

您应该能够使用UNPIVOT功能:

select DISTINCT entidad, value -- use distinct if you want to remove duplicates 
from 
(
    SELECT 
     Entidades.nombre as entidad, 
     Servicios.nombre as servicio1, 
     sp.nombre as servicio2, 
     sc.nombre as servicio3 
    FROM 
     Entidades 
    LEFT JOIN 
     (Banksphere INNER JOIN Servicios 
    ON (Banksphere.servicio_id = Servicios.id)) 
    ON Entidades.id = Banksphere.entidad_id 
    LEFT JOIN 
     (PAS INNER JOIN Servicios sp 
    ON (sp.id = 3)) 
    ON Entidades.id = PAS.entidad_id 
    LEFT JOIN 
     (CAM INNER JOIN Servicios sc 
    ON (sc.id = 0)) 
    ON Entidades.id = CAM.entidad_id 
    GROUP BY 
     Entidades.id, Entidades.nombre, Servicios.nombre, sp.nombre, sc.nombre 
) src 
unpivot 
(
    value 
    for col in (servicio1, servicio2, servicio3) 
) unpiv 

SQL Fiddle with Demo

+0

即工作,但我得到“SERVICIOS”重复记录,如果“Entidades”有它...例如 桑坦德| PAS 桑坦德| Movilidad 桑坦德| Superlinea 桑坦德| PAS 我需要为每个“Entidad”只有一个“Servicio”,如果它有它的话 –

+0

你可以在外部选择中使用'DISTINCT'关键字来删除重复项。请参阅我的编辑。 – Taryn

+0

还有一件事...我需要SUM从“Banksphere,PAS和CAM”表中列出“Reconocido”...并将其显示为... Santander | PAS | X(其中X是该“服务”的总和)你能帮助我吗? –