SQL Server案例总和查询

时间:2012-12-18 17:58:04

标签: sql-server loops

更新 我设法得到1或0取决于计数,但它没有被“Servicio”列分隔所以如果有任何行匹配,一切都有1或0 ...

我有以下查询无效...它永远不会停止执行,我想要的是为每个“Servicios”列添加0或1 ......

我有三张表,“Banksphere”,“PAS”和“CAM”与“Entidades”和“Servicios”的关系

PAS和CAM没有“servicio_id”,但是我使用Servicios的“Join”来解决这个问题......那就是PAS的“Servicio”是3,CAM是0。

我希望我解释得很好......我现在不能做得更好,我不在我的电脑上

示例:

Banksphere [ id | entidad_id | servicio_id | reconocido ]
           [ 1  |     3      |      9      |     0      ]
           [ 2  |     1      |      1      |     1      ]
           [ 3  |     4      |      6      |     0      ]

PAS        [ id | entidad_id | reconocido ]
           [ 1  |     3      |     0      ]
           [ 2  |     5      |     1      ]
           [ 3  |     4      |     0      ]

CAM        [ id | entidad_id | reconocido ]
           [ 1  |     0      |     1      ]
           [ 2  |     0      |     1      ]
           [ 3  |     0      |     1      ]

我想要的结果就是这个......

[ Entidad | Servicio | Alertas ]
[    0    |     0    |    1    ]
[    1    |     1    |    1    ]
[    3    |     9    |    0    ]
[    3    |     3    |    0    ]
[    4    |     6    |    0    ]
[    4    |     3    |    0    ]
[    5    |     3    |    1    ]

有人能帮助我吗?非常感谢你......

SELECT DISTINCT entidad, value, alertas
FROM   (SELECT Entidades.id AS entidad,
    Servicios.nombre AS servicio1,
    sp.nombre AS servicio2,
    sc.nombre AS servicio3,
    CASE WHEN (
    CASE WHEN (SELECT COUNT(Banksphere.reconocido) FROM Banksphere WHERE Banksphere.reconocido = '0' AND Banksphere.fecha = '2012-12-18') = 0 THEN 0 ELSE 1 END
    + CASE WHEN (SELECT COUNT(PAS.reconocido) FROM PAS WHERE PAS.reconocido = '0' AND PAS.fecha = '2012-12-18') = 0 THEN 0 ELSE 1 END
    + CASE WHEN (SELECT COUNT(CAM.reconocido) FROM CAM WHERE CAM.reconocido = '0' AND CAM.fecha = '2012-12-18') = 0 THEN 0 ELSE 1 END) = 0 THEN 0 ELSE 1 END AS alertas
FROM   Entidades
LEFT JOIN (Banksphere INNER JOIN Servicios
    ON ( Banksphere.servicio_id = Servicios.id ))
    ON Entidades.id = Banksphere.entidad_id
    AND Banksphere.fecha = '2012-12-18'
LEFT JOIN (CAM
    INNER JOIN Servicios sc
ON ( sc.nombre = 'CAM' ))
ON Entidades.id = CAM.entidad_id
    AND CAM.fecha = '2012-12-18'
LEFT JOIN (PAS
    INNER JOIN Servicios sp
ON ( sp.nombre = 'PAS' ))
ON Entidades.id = PAS.entidad_id
GROUP  BY Entidades.id,
    Entidades.nombre,
    Servicios.nombre,
    sp.nombre,
    sc.nombre,
    Banksphere.reconocido,
    PAS.reconocido,
    CAM.reconocido
)
src 
UNPIVOT ( value FOR col IN (servicio1, servicio2, servicio3) ) unpiv
GROUP BY alertas, entidad, value
ORDER  BY entidad ASC, value ASC

0 个答案:

没有答案