[英]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.