sql server复合连接查询

时间:2012-12-17 18:50:53

标签: sql sql-server tsql unpivot

我有以下查询,它正在工作,但我得到4列(3个命名方式相同)因为我想要的只是得到两列数据,“Entidad”和“Servicio”但找不到这样做..

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  

1 个答案:

答案 0 :(得分: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