选择sum where where子句SQL

Rob*_*ter 8 sql math

我有以下代码,它可以工作,但我试图为每个Banksphere.servicio_id列分隔SUM,这个代码SUM只有一个servicio_id ...我有点迷失,有人可以帮帮我吗?

正如你所看到的,每个WHERE子句都是完全相同的但是Banksphere.peticion_id是唯一一个改变的...所以也许有一些更好的方法来过滤一下普通的子句并且只留下peticion_id用于OK和KO?

SELECT
(SELECT
    SUM(valor)
FROM
    Banksphere
WHERE
    Banksphere.fecha = '2013-01-14'
AND
    Banksphere.servicio_id = '6'
AND
    Banksphere.entidad_id = '2'
AND
    Banksphere.peticion_id = '0') AS OK,
(SELECT
    SUM(valor)
FROM
    Banksphere
WHERE
    Banksphere.fecha = '2013-01-14'
AND
    Banksphere.servicio_id = '6'
AND
    Banksphere.entidad_id = '2'
AND
    Banksphere.peticion_id = '1') AS KO
Run Code Online (Sandbox Code Playgroud)

使用工作代码编辑

SELECT  Servicios.nombre as servicio,
        SUM(case when peticion_id = '0' then valor end) as OK,
        SUM(case when peticion_id = '1' then valor end) as KO
FROM    Banksphere
INNER JOIN
    Servicios
ON
    Banksphere.servicio_id = Servicios.id
WHERE   Banksphere.fecha = '2013-01-14'
        AND Banksphere.entidad_id = '2'
        AND Banksphere.peticion_id in ('0', '1')
group by Servicios.nombre
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 21

我想你想要这样的东西:

SELECT  banksphere.servicio_id, SUM(valor),
        SUM(case when peticion_id = '0' then valor end) as OK,
        SUM(case when peticion_id = '1' then valor end) as KO
FROM    Banksphere
WHERE   Banksphere.fecha = '2013-01-14'
        AND Banksphere.entidad_id = '2'
        AND Banksphere.peticion_id in ('0', '1', ...)
group by banksphere.servicio_id
Run Code Online (Sandbox Code Playgroud)

这样group by就可以获得多个"servicio_ids",并为OK和KO添加单独的列.如果只想要servicio_id = 6,那么将其添加回where子句中.并且,您可能也想要其他变量group by,但您只在问题中提及服务.