Google 具有多个和空白(忽略)条件的工作表查询函数
Google Sheets Query Function With Multiple and Blank (ignored) Criteria
我有一个 sheet(培训)列表所有员工的信息(超过 4,000 行),我在另一个 sheet(搜索)上有一个查询功能,允许我根据我的团队选择的标准。选择和对应的单元格是:
Company - A3 : First Name - B3 : Last Name - C3 : Email - D3 : PO # - E3 : Class - F3
我需要构建一个 query(),让我仅使用具有信息的标准单元格进行过滤,完全忽略任何空白的标准。
Query() 将使用单个条件或多个条件(使用 "or" 和 "and")工作,但我们拥有的信息并不总是一致的(可能有姓氏但没有名字,有电子邮件但没有公司等)所以我希望它仅使用与我的团队输入的数据相匹配的数据进行过滤,如果单元格 (A3:F3) 留空则忽略条件。
现在代码的编写方式包括与任何条件匹配的行(我这样写是为了知道我的引用是正确的,然后扩展了条件)。我需要它包含仅与输入的确切条件匹配的行。
=Query({Training!A2:AS},"select Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14, Col15, Col16, Col17, Col19, Col21, Col23, Col25, Col27, Col29, Col31, Col32, Col34, Col37, Col38, Col40, Col42, Col43, Col44, Col45 where Col2 = '"& A3 &"' or Col30= '"& E3 &"' ",0)
举个我想要的例子。如果我的团队将以下条件输入 "Search" sheet:
(A3) 公司 - Metro:(B3) 名字 - 留空:(C3) 姓氏 - 留空: (D3) 电子邮件 - 留空 : (E3) PO # - 123456 : (F3) Class - 留空
我当前的代码将显示在 Col2 中包含 Metro 或在 Col30 中包含 123456 的任何行。我希望它显示仅包含 Metro 和 John 的行,忽略仅匹配 1 个条件的行并完全忽略其他条件,因为它们留空。
我在网上发现了一些我认为可行的东西,但要么它们最终不是我所需要的,要么我对这些功能的精通程度不足以使它们起作用。任何对教学目的的解释帮助都会很棒。
你可以这样做:
=IFERROR(QUERY({Training!A2:AS},
"select Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col19,Col21,Col23,Col25,Col27,Col29,Col31,Col32,Col34,Col37,Col38,Col40,Col42,Col43,Col44,Col45
where "&TEXTJOIN(" and ", 1,
IF(A3<>"", "Col2 = '"&A3&"'", ),
IF(B3<>"", "Col3 = '"&B3&"'", ),
IF(C3<>"", "Col4 = '"&C3&"'", ),
IF(D3<>"", "Col6 = '"&D3&"'", ),
IF(E3<>"", "Col30= '"&E3&"'", ),
IF(F3<>"", "Col18= '"&F3&"'", )), 0), "no match")
我有一个 sheet(培训)列表所有员工的信息(超过 4,000 行),我在另一个 sheet(搜索)上有一个查询功能,允许我根据我的团队选择的标准。选择和对应的单元格是:
Company - A3 : First Name - B3 : Last Name - C3 : Email - D3 : PO # - E3 : Class - F3
我需要构建一个 query(),让我仅使用具有信息的标准单元格进行过滤,完全忽略任何空白的标准。
Query() 将使用单个条件或多个条件(使用 "or" 和 "and")工作,但我们拥有的信息并不总是一致的(可能有姓氏但没有名字,有电子邮件但没有公司等)所以我希望它仅使用与我的团队输入的数据相匹配的数据进行过滤,如果单元格 (A3:F3) 留空则忽略条件。
现在代码的编写方式包括与任何条件匹配的行(我这样写是为了知道我的引用是正确的,然后扩展了条件)。我需要它包含仅与输入的确切条件匹配的行。
=Query({Training!A2:AS},"select Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14, Col15, Col16, Col17, Col19, Col21, Col23, Col25, Col27, Col29, Col31, Col32, Col34, Col37, Col38, Col40, Col42, Col43, Col44, Col45 where Col2 = '"& A3 &"' or Col30= '"& E3 &"' ",0)
举个我想要的例子。如果我的团队将以下条件输入 "Search" sheet:
(A3) 公司 - Metro:(B3) 名字 - 留空:(C3) 姓氏 - 留空: (D3) 电子邮件 - 留空 : (E3) PO # - 123456 : (F3) Class - 留空
我当前的代码将显示在 Col2 中包含 Metro 或在 Col30 中包含 123456 的任何行。我希望它显示仅包含 Metro 和 John 的行,忽略仅匹配 1 个条件的行并完全忽略其他条件,因为它们留空。
我在网上发现了一些我认为可行的东西,但要么它们最终不是我所需要的,要么我对这些功能的精通程度不足以使它们起作用。任何对教学目的的解释帮助都会很棒。
你可以这样做:
=IFERROR(QUERY({Training!A2:AS},
"select Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col19,Col21,Col23,Col25,Col27,Col29,Col31,Col32,Col34,Col37,Col38,Col40,Col42,Col43,Col44,Col45
where "&TEXTJOIN(" and ", 1,
IF(A3<>"", "Col2 = '"&A3&"'", ),
IF(B3<>"", "Col3 = '"&B3&"'", ),
IF(C3<>"", "Col4 = '"&C3&"'", ),
IF(D3<>"", "Col6 = '"&D3&"'", ),
IF(E3<>"", "Col30= '"&E3&"'", ),
IF(F3<>"", "Col18= '"&F3&"'", )), 0), "no match")