Сумма значений одного столбца в SQL - PullRequest
0 голосов
/ 10 января 2019

Мне нужно показать сумму столбца, например: Result of the selects

Как я могу создать сумму "LQ's", например: 0+0+38+1010+216+664

Мой код:

select pla.DSC_ACO,
       sum(case when res.cod_ordem_producao like 'LQX%' then 1 else 0 end) as lqx,
       sum(case when res.cod_ordem_producao like 'LQP%' then 1 else 0 end) as lqp,
       sum(case when res.cod_ordem_producao like 'LQT%' then 1 else 0 end) as LQT,
       sum(case when res.cod_ordem_producao like 'LQRT%' then 1 else 0 end) as lqrt,
       sum(case when res.cod_ordem_producao like 'LQRZ%' then 1 else 0 end) as lqrz,
       sum(case when res.cod_ordem_producao like 'LQZ%' then 1 else 0 end) as LQZ,
       sum(case when res.cod_ordem_producao like 'LQRW%' then 1 else 0 end) as lqrw,
       sum(case when res.cod_ordem_producao like 'LQW%' then 1 else 0 end) as LQW,
       sum(case when res.cod_ordem_producao like 'LQ%' then 1 else 0 end) as Lq,
       sum(case when res.cod_ordem_producao like 'LQR%' then 1 else 0 end) as LQR
from QT_QTS.RES_TUBO_REVENIMENTO2 res, QT_QTS.PLA_ORDEM_PRODUCAO pla
where res.COD_ORDEM_PRODUCAO = pla.COD_ORDEM_PRODUCAO
and res.DTH_CRIACAO_REG >= :dthini 
and res.DTH_CRIACAO_REG <=:dthfim
group by pla.DSC_ACO

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Используйте общее табличное выражение для упорядочения нужных вам данных, затем просто выберите из них простое суммирование. CTE в предложении WITH позволит вам выбирать из этого, как если бы это была обычная таблица.

WITH temp_table AS (
    select pla.DSC_ACO,
           case when res.cod_ordem_producao like 'LQX%' then 1 else 0 end as LQX,
           case when res.cod_ordem_producao like 'LQP%' then 1 else 0 end as LQP,
           case when res.cod_ordem_producao like 'LQT%' then 1 else 0 end as LQT,
           case when res.cod_ordem_producao like 'LQRT%' then 1 else 0 end as LQRT,
           case when res.cod_ordem_producao like 'LQRZ%' then 1 else 0 end as LQRZ,
           case when res.cod_ordem_producao like 'LQZ%' then 1 else 0 end as LQZ,
           case when res.cod_ordem_producao like 'LQRW%' then 1 else 0 end as LQRW,
           case when res.cod_ordem_producao like 'LQW%' then 1 else 0 end as LQW,
           case when res.cod_ordem_producao like 'LQR%' then 1 else 0 end as LQR,
           case when res.cod_ordem_producao like 'LQ%' then 1 else 0 end as LQ
    from QT_QTS.RES_TUBO_REVENIMENTO2 res, QT_QTS.PLA_ORDEM_PRODUCAO pla
    where res.COD_ORDEM_PRODUCAO = pla.COD_ORDEM_PRODUCAO
        and res.DTH_CRIACAO_REG >= :dthini 
        and res.DTH_CRIACAO_REG <= :dthfim)
SELECT SUM(LQ) AS LQ_SUM FROM temp_table

Вы не указали окончательный формат, в котором вы нуждались в запросе, но ваш вопрос только спрашивал, как вы получаете сумму этого столбца. Если вам нужно расширить логику, включив в нее другие агрегаты, вы сможете увидеть, как добавить дополнительные поля в заключительный оператор SELECT.

Кроме того, вы должны заметить, что вы собираетесь вести двойной учет некоторых данных. Например, LQR также будет считать те же значения, что и в LQRT, LQRZ и LQRW. И LQ будет считать те же вещи, что и все поля. Это может быть поведение, которое вам нужно, но если вы хотите, чтобы для каждого значения приходилось уникальное мусорное ведро, вам сначала понадобится выполнить еще несколько логических манипуляций с ним.

0 голосов
/ 10 января 2019

Вы можете использовать простой запрос, подобный этому, чтобы получить результат для LQR% предиката, который вы запрашиваете в своем вопросе

select count(*) as LQR
from QT_QTS.RES_TUBO_REVENIMENTO2 res
join QT_QTS.PLA_ORDEM_PRODUCAO pla on res.COD_ORDEM_PRODUCAO = pla.COD_ORDEM_PRODUCAO
where res.DTH_CRIACAO_REG >= :dthini 
      and res.DTH_CRIACAO_REG <=:dthfim
      and res.cod_ordem_producao like 'LQR%'
0 голосов
/ 10 января 2019
select sum(lqx), sum(lqp), sum(lqt), sum(lqrt), sum(lqrz), sum(lqz), sum(lqrw), 
sum(lqw), sum(lq)
, sum(lqr) from
(select pla.DSC_ACO,
   sum(case when res.cod_ordem_producao like 'LQX%' then 1 else 0 end) as lqx,
   sum(case when res.cod_ordem_producao like 'LQP%' then 1 else 0 end) as lqp,
   sum(case when res.cod_ordem_producao like 'LQT%' then 1 else 0 end) as LQT,
   sum(case when res.cod_ordem_producao like 'LQRT%' then 1 else 0 end) as lqrt,
   sum(case when res.cod_ordem_producao like 'LQRZ%' then 1 else 0 end) as lqrz,
   sum(case when res.cod_ordem_producao like 'LQZ%' then 1 else 0 end) as LQZ,
   sum(case when res.cod_ordem_producao like 'LQRW%' then 1 else 0 end) as lqrw,
   sum(case when res.cod_ordem_producao like 'LQW%' then 1 else 0 end) as LQW,
   sum(case when res.cod_ordem_producao like 'LQ%' then 1 else 0 end) as Lq,
   sum(case when res.cod_ordem_producao like 'LQR%' then 1 else 0 end) as LQR
from QT_QTS.RES_TUBO_REVENIMENTO2 res, QT_QTS.PLA_ORDEM_PRODUCAO pla
where res.COD_ORDEM_PRODUCAO = pla.COD_ORDEM_PRODUCAO
and res.DTH_CRIACAO_REG >= :dthini 
and res.DTH_CRIACAO_REG <=:dthfim
group by pla.DSC_ACO) as values
0 голосов
/ 10 января 2019

Я надеюсь, что это работает:)

select pla.DSC_ACO,
       sum(case when res.cod_ordem_producao like 'LQX%' then 1 else 0 end) as lqx,
       sum(case when res.cod_ordem_producao like 'LQP%' then 1 else 0 end) as lqp,
       sum(case when res.cod_ordem_producao like 'LQT%' then 1 else 0 end) as LQT,
       sum(case when res.cod_ordem_producao like 'LQRT%' then 1 else 0 end) as lqrt,
       sum(case when res.cod_ordem_producao like 'LQRZ%' then 1 else 0 end) as lqrz,
       sum(case when res.cod_ordem_producao like 'LQZ%' then 1 else 0 end) as LQZ,
       sum(case when res.cod_ordem_producao like 'LQRW%' then 1 else 0 end) as lqrw,
       sum(case when res.cod_ordem_producao like 'LQW%' then 1 else 0 end) as LQW,
       sum(case when res.cod_ordem_producao like 'LQ%' then 1 else 0 end) as Lq,
       sum(case when res.cod_ordem_producao like 'LQR%' then 1 else 0 end) as LQR
from QT_QTS.RES_TUBO_REVENIMENTO2 res, QT_QTS.PLA_ORDEM_PRODUCAO pla
where res.COD_ORDEM_PRODUCAO = pla.COD_ORDEM_PRODUCAO
and res.DTH_CRIACAO_REG >= :dthini 
and res.DTH_CRIACAO_REG <=:dthfim
group by pla.DSC_ACO
UNION ALL
SELECT 
'TOTAL' DSC,
SUM(lqx),
SUM(lqp),
SUM(LQT),
SUM(lqrt),
SUM(qrz),
SUM(LQZ),
SUM(lqrw),
SUM(LQW),
SUM(Lq),
SUM(LQR)
FROM (select pla.DSC_ACO,
       sum(case when res.cod_ordem_producao like 'LQX%' then 1 else 0 end) as lqx,
       sum(case when res.cod_ordem_producao like 'LQP%' then 1 else 0 end) as lqp,
       sum(case when res.cod_ordem_producao like 'LQT%' then 1 else 0 end) as LQT,
       sum(case when res.cod_ordem_producao like 'LQRT%' then 1 else 0 end) as lqrt,
       sum(case when res.cod_ordem_producao like 'LQRZ%' then 1 else 0 end) as lqrz,
       sum(case when res.cod_ordem_producao like 'LQZ%' then 1 else 0 end) as LQZ,
       sum(case when res.cod_ordem_producao like 'LQRW%' then 1 else 0 end) as lqrw,
       sum(case when res.cod_ordem_producao like 'LQW%' then 1 else 0 end) as LQW,
       sum(case when res.cod_ordem_producao like 'LQ%' then 1 else 0 end) as Lq,
       sum(case when res.cod_ordem_producao like 'LQR%' then 1 else 0 end) as LQR
from QT_QTS.RES_TUBO_REVENIMENTO2 res, QT_QTS.PLA_ORDEM_PRODUCAO pla
where res.COD_ORDEM_PRODUCAO = pla.COD_ORDEM_PRODUCAO
and res.DTH_CRIACAO_REG >= :dthini 
and res.DTH_CRIACAO_REG <=:dthfim
group by pla.DSC_ACO)
...