繁体   English   中英

按两列中的值过滤

[英]Filter by a value in two columns

我的桌子看起来像这样

团队 人们
A组 英语 3
B组 英语 4
B组 西班牙语 3
西班牙队 西班牙语 4
团队 C 葡萄牙语 4

如果您注意到, Team B处理英语和西班牙语,还有一个Team Spanish

我想将Team SpanishTeam B - Spanish结合起来,所以它只显示一行,总和为 7 人。

我的预期结果:

团队 人们
西班牙队 西班牙语 7

我的解决方法是创建一个额外的列,将Team列与Language列结合起来,然后对结果求和

SUMIF(people, aux_col IN ('team B - Spanish', 'Team Spanish - Spanish')) AS new_people_count  

别管最后的代码,它只是伪代码

我使用谷歌表格进行了计算。 我认为你必须分两步完成你的目标: 第一步 创建一个像你原来的表一样的表。 这是 google sheet Original Table中的原始表格。 在新表中写入标题,并在 TEAM 列下写入此公式 =if (B3<>"Spanish";A3;"Team Spanish") 将此公式复制到第 4 到 7 行中。在 LANGUAGE 和 PEOPLE 列下复制LANGUAGE 列的原始表示例的确切值写入 =B3 并从此公式中复制第 4 到 7 行。PEOPLE 列的示例写入 =C3 并从此公式中复制第 4 到 7 行。最后,您将有这个表:表步骤 1

最后你必须上表 pivot。 在行中放置 TEAM 和 LANGUAGE。 不要在 PEOPLE 的 SUM 列中添加任何内容。 在这里你有你的决赛桌决赛桌

让我知道这是否是您想要做的。 再见

使用具有条件的查询将所有 Team B-Spanish 更改为 Team Spanish 我还添加了计数 function,该计数添加了 (sum()) 人员并产生了预期的 output:

WITH Sample AS
 (SELECT 'Team A' as Team, "English" as Language, 3 as People UNION ALL
  SELECT 'Team B', "English", 4 UNION ALL
  SELECT 'Team B', "Spanish", 3 UNION ALL
  SELECT 'Team Spanish', "Spanish", 4 UNION ALL
  SELECT 'Team C', "Portuguese", 4)

SELECT Language, CASE
WHEN CONCAT(Team, '-', Language) = 'Team B-Spanish' THEN 'Team Spanish'
ELSE Team
END AS Team,
SUM (People) as People
From Sample where Language = "Spanish" GROUP BY Team, Language 

Output: 在此处输入图像描述

我的想法过于复杂了......这段代码解决了这个问题

CASE
WHEN CONCAT(team, '-', language) = 'Team B-Spanish' THEN 'Team Spanish'
ELSE team
END AS team,

在 SQL 中,您可以运行如下查询:

select case when Language="Spanish" then "Team Spanish" else Team end as Team, Language, sum(People) from myTable group by Team, Language

让我知道这是否可以成为您的解决方案。

暂无
暂无

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

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