12

私は次のコードを持っています、それは動作しますが、Banksphere.servicio_id列ごとにSUMを分離しようとしています。このコードは1つのservicio_idのみをSUMします...私は少し迷っています、誰かが私を助けてくれますか?

ご覧のとおり、すべてのWHERE句はまったく同じですが、変更されるのはBanksphere.peticion_idだけです...したがって、共通の句を一度フィルタリングして、OKとKOにpeticion_idだけを残すより良い方法があるのではないでしょうか。

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

作業コードで編集

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
4

3 に答える 3

25

私はあなたがこれらの線に沿って何かを望んでいると思います:

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

これには、group by複数の「servicio_ids」を取得できるようになっているため、OKとKOに別々の列が追加されます。servicio_id = 6のみが必要な場合は、それをwhere句に追加し直します。また、他の変数も必要になる場合がありgroup byますが、質問ではサービスについてのみ言及します。

于 2013-01-16T14:42:11.413 に答える
4
SELECT  servicio_id,
        entidad_id,
        SUM(CASE WHEN peticion_id = 0 THEN valor ELSE 0 END) OK,
        SUM(CASE WHEN peticion_id = 1 THEN valor ELSE 0 END) KO
FROM    BankSpehere
WHERE   fecha = '2013-01-14' AND 
        entidad_id = '2' AND 
        peticion_id in ('0', '1')
GROUP BY servicio_id, entidad_id
于 2013-01-16T14:41:42.243 に答える
2
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 in ('0', '1', ...)
于 2013-01-16T14:39:00.333 に答える