簡體   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