2016-01-20 44 views
2

問題:在谷歌表,使用內置的功能,我如何寫一個過濾器基於在不存在在每行一列,以排除記錄來自另一個範圍的有效值列表。谷歌表與IN子句過濾

細節我使用谷歌表寫到哪我所有的支出和收入都進入了所謂的交易單張紙融資電子表格

。我有一個名爲常量的單獨表,其中包含收入類別列表和費用類別列表。

下面是一些示例數據的問題的目的:

常量

enter image description here

交易

enter image description here

我有一個片稱爲ByMonth,我想在一個部分中顯示所有費用交易,並在單獨的部分中顯示所有收入交易。 目標:

enter image description here

我需要基本上做到這一點的SQL查詢在谷歌表功能:

select date, category, amount from transactions 
where category not in (
    select * from expense_categories 
) 

,但我無法弄清楚如何讓谷歌表讓我做一個在概念上與他們的職能。

這裏是我使用用於基於日期字段過濾所述行的細胞功能的表達:

=filter(Transactions!A2:C, 
     DATEVALUE(Transactions!A2:A) >= date(2015,4,1), 
     DATEVALUE(Transactions!A2:A) <= date(2015,4,30) 
) 

我會增加第三狀態到濾波器()函數,並且第三條件將以某種方式比較每行數據的類別列與有效費用或收入類別列表並返回布爾值。

這裏是我都試過了,沒有用一些其他的東西,包括MATCH,ARRAYFORMULA一些變化中,等:

=filter(Transactions!A2:C, row(Transactions!B2:B) = UNIQUE(Constants!A2:A)) 
=filter(Transactions!A2:C, Transactions!B2:B = UNIQUE(Constants!A2:A)) 
=filter(Transactions!A2:C, Transactions!B2:B = Constants!A2:A) 

有什麼建議?

+1

你有一個樣品的電子表格,你可以分享 –

回答

2

你有興趣的公式爲:

=filter(Journal!A2:C13,IFERROR(Match(Journal!B2:B13,Categories!A2:A3,0))) 

功能match(a, b, 0)搜索如果a可以b找到。完全匹配時,您需要0(默認值是最接近的匹配)。如果找不到a,則會發生錯誤,因此您用iferror包裝該功能以跳過錯誤。

這裏是working example file

+0

這正是我正在尋找。我試過Match,但輸出看起來不正確。第三個參數是我錯過的。謝謝@丹尼爾! – TwitchBronBron

2

由於每個類別使用關鍵字,expenseincome,下面的公式返回了預期的效果

=query(Journal!A2:C13,"Select * where B contains 'expense'") 
=query(Journal!A2:C13,"Select * where B contains 'income'") 
+0

我使用的詞彙「費用」和「收入」中的示例來使例子更清楚,但我不希望要求這些關鍵字存在。但我很高興知道這是一個選擇。感謝您的回答@Rubén! – TwitchBronBron

+1

您好!@TwitchBronBron。要詳細瞭解Google查詢語言,請參閱https://developers.google.com/chart/interactive/docs/querylanguage?hl=zh_CN –