简体   繁体   English

更改一行的值并在 SQL 中添加一个总行

[英]Change value of a row and add a total row in SQL

For performance reasons, I have to adapt some of my SQL queries.出于性能原因,我必须调整一些 SQL 查询。 Here's my query and its result:这是我的查询及其结果:

SELECT 
    CODACT, 
    SUM(CASE WHEN etasup = 10 THEN CUMCOL END) AS aprep, 
    SUM(CASE WHEN etasup = 20 THEN CUMCOL END) AS encours, 
    SUM(CASE WHEN etasup > 20 THEN CUMCOL END) AS prepares, 
    SUM(CUMCOL) AS total 
FROM 
    FGE50NEUV1.GESUPE 
WHERE 
    TYPSUP = '1' 
    AND (DATLIV >= ` + date(0) +` 
         AND DATLIV <= ` + date(addDays) + `) 
GROUP BY 
    CODACT

Result:结果:

[
  {
    CODACT: 'AUA',
    APREP: 6503,
    ENCOURS: 244,
    PREPARES: 30180,
    TOTAL: 36927
  },
  {
    CODACT: 'AUF',
    APREP: null,
    ENCOURS: null,
    PREPARES: 73,
    TOTAL: 73
  },
  {
    CODACT: 'LID',
    APREP: 12597,
    ENCOURS: 128,
    PREPARES: 21556,
    TOTAL: 34281
  },
  {
    CODACT: 'MAT',
    APREP: 410,
    ENCOURS: null,
    PREPARES: 5059,
    TOTAL: 5469
  }
]

I would like to merge the two rows "AUA" and "AUF" and change the merged row name to "Auchan", and then add a row with CODACT "TOTAL" which contains all the SUM of previous values我想合并两行“AUA”和“AUF”并将合并的行名称更改为“Auchan”,然后添加一个包含 CODACT“TOTAL”的行,其中包含所有先前值的总和

First problem is easy - replace CODACT with case when CODACT in ('AUA', 'AUF') then 'Auchan' else CODACT end , both in SELECT (you need to add alias as CODACT there) and GROUP BY parts.第一个问题很简单 - 将CODACT替换为case when CODACT in ('AUA', 'AUF') then 'Auchan' else CODACT end ,两者都在SELECT (你需要在那里添加别名as CODACT )和GROUP BY部分。

Second part (add row with total) is most easily solved by CTE:第二部分(添加总计行)最容易通过 CTE 解决:

with CTE as (SELECT 
    CODACT, 
    SUM(CASE WHEN etasup = 10 THEN CUMCOL END) AS aprep, 
    SUM(CASE WHEN etasup = 20 THEN CUMCOL END) AS encours, 
    SUM(CASE WHEN etasup > 20 THEN CUMCOL END) AS prepares, 
    SUM(CUMCOL) AS total 
FROM 
    FGE50NEUV1.GESUPE 
WHERE 
    TYPSUP = '1' 
    AND (DATLIV >= ` + date(0) +` 
         AND DATLIV <= ` + date(addDays) + `) 
GROUP BY 
    CODACT
)
select CODACT, aprep, encours, prepares, total
from CTE
union all
select 'TOTAL', sum(aprep), sum(encours), sum(prepares), sum(total)
from CTE

You can combine both these improvements.您可以将这两种改进结合起来。 I didn't check syntax, sorry:)我没有检查语法,抱歉:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM