簡體   English   中英

更改一行的值並在 SQL 中添加一個總行

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

出於性能原因,我必須調整一些 SQL 查詢。 這是我的查詢及其結果:

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

結果:

[
  {
    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
  }
]

我想合並兩行“AUA”和“AUF”並將合並的行名稱更改為“Auchan”,然后添加一個包含 CODACT“TOTAL”的行,其中包含所有先前值的總和

第一個問題很簡單 - 將CODACT替換為case when CODACT in ('AUA', 'AUF') then 'Auchan' else CODACT end ,兩者都在SELECT (你需要在那里添加別名as CODACT )和GROUP BY部分。

第二部分(添加總計行)最容易通過 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

您可以將這兩種改進結合起來。 我沒有檢查語法,抱歉:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM