使用where条件显示2个列出/分组值的总和

ubbxdtey  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(203)

我想添加显示的两列的值,并显示为1列名。这是我得到的结果,

ID        Total
Apple     10
RawApple  10
Mango     10
RawMango  10

我要输出为

ID      Total
Apples   20
Mangoes  20
rlcwz9us

rlcwz9us1#

如果问题是删除前三个字符(如果它们是“原始的”),那么您可以执行以下操作:

select (case when id like 'Raw%' then stuff(id, 1, 3, '') else id end) as id,
       sum(total)
from t
group by (case when id like 'Raw%' then stuff(id, 1, 3, '') else id end);

如果要用其他值替换特定值,我建议使用查询内查找表:

select coalesce(v.new_id, t.id) as id, sum(total)
from t left join
     (values ('RawApple', 'Apple'),
             ('RawMango', 'Mango')
     ) v(id, new_id)
     on t.id = v.id
group by coalesce(v.new_id, t.id);
xxe27gdn

xxe27gdn2#

如果我们假设水果的名字在前缀后面,前缀以连字符结尾( - ),然后我们可以使用 STUFF 要删除前缀并进行聚合,请执行以下操作:

WITH VTE AS(
    SELECT *
    FROM (VALUES('Apple',10),
                ('Raw-Apple',10),
                ('Mango',10),
                ('Raw-Mango',10))V(ID,Total))
SELECT S.ID,
       SUM(V.Total) AS Total
FROM VTE V
     CROSS APPLY(VALUES(STUFF(V.ID,1,CHARINDEX('-',V.ID),'')))S(ID)
GROUP BY S.ID;

注意,我不会把水果的名字改成复数,因为根据水果的不同,复数是什么。你需要一个字典表来存储水果的复数形式,然后把它连起来。一张这样的table:

CREATE TABLE dbo.FruitPlural (Fruit varchar(20), Plural varchar(20));
INSERT INTO dbo.FruitPlural
VALUES ('Apple','Apples'),
       ('Mango','Mangoes'),
       ('Strawberry','Strawberries'),
       ...;

注意,这个答案是无效的,因为op移动了目标岗位,因为样本数据不能代表他们的实际数据,但是,我离开这里,因为它可能会帮助未来的用户。

相关问题