Google Sheets Query函数:如何按条件动态调整返回列顺序?
Google Sheets Query动态调整列顺序解决方案
问题背景
现有Google Sheets公式:
=Query('Final Tracker'!B:G, "Select Col1, Col2, Col3, Col5, Col4, Col6 Where Col3='Credit Card payment' OR Col6='Credit Card'", 0)
该公式可返回符合条件的行,但列顺序固定。需求调整为:
- 当
Col3='Credit Card payment'(即D列值为"Credit Card payment")时,返回列顺序为Col1, Col2, Col3, Col5, Col4, Col6(对应B,C,D,F,E,G列) - 当
Col6='Credit Card'(即G列值为"Credit Card")时,返回列顺序为Col1, Col2, Col3, Col4, Col5, Col6(对应B,C,D,E,F,G列)
两种条件不会同时触发。
示例数据(Final Tracker表)
| Column B (Date) | Column C (Description) | Column D (Category) | Column E (Income) | Column F (Expenses) | Column G (Account Type) |
|---|---|---|---|---|---|
| 01-04-2024 | Etsy | Personal | $42.73 | Checking | |
| 01-04-2024 | Walmart | Personal | $42.73 | Credit Card | |
| 05-04-2024 | payment | Credit Card payment | $25.00 | Checking |
当前查询结果
| Column B (Date) | Column C (Description) | Column D (Category) | Column E (Income) | Column F (Expenses) | Column G (Account Type) |
|---|---|---|---|---|---|
| 01-04-2024 | Walmart | Personal | $42.73 | Credit Card | |
| 05-04-2024 | payment | Credit Card payment | $25.00 | Checking |
期望输出
| Column B (Date) | Column C (Description) | Column D (Category) | Column E (Income) | Column F (Expenses) | Column G (Account Type) |
|---|---|---|---|---|---|
| 01-04-2024 | Walmart | Personal | $42.73 | Credit Card | |
| 05-04-2024 | payment | Credit Card payment | $25.00 | Checking |
解决方案公式
由于Query函数无法动态修改SELECT子句的列顺序,改用FILTER分别筛选两类数据并调整列顺序,再用VSTACK合并结果(包含表头):
=VSTACK( {'Final Tracker'!B1:C1, 'Final Tracker'!D1, 'Final Tracker'!E1, 'Final Tracker'!F1, 'Final Tracker'!G1}, FILTER({'Final Tracker'!B:C, 'Final Tracker'!D, 'Final Tracker'!F, 'Final Tracker'!E, 'Final Tracker'!G}, 'Final Tracker'!D:D="Credit Card payment"), FILTER('Final Tracker'!B:G, 'Final Tracker'!G:G="Credit Card") )
公式说明
- 表头部分:
{'Final Tracker'!B1:C1, 'Final Tracker'!D1, 'Final Tracker'!E1, 'Final Tracker'!F1, 'Final Tracker'!G1}提取原始表头,保证输出表头一致。 - 第一类筛选:
FILTER({'Final Tracker'!B:C, 'Final Tracker'!D, 'Final Tracker'!F, 'Final Tracker'!E, 'Final Tracker'!G}, 'Final Tracker'!D:D="Credit Card payment")筛选D列为"Credit Card payment"的行,同时调整E、F列顺序(对应原需求的Col5,Col4)。 - 第二类筛选:
FILTER('Final Tracker'!B:G, 'Final Tracker'!G:G="Credit Card")筛选G列为"Credit Card"的行,保留原始列顺序。 - 合并结果:
VSTACK将表头、两类筛选结果垂直合并,得到最终符合要求的输出。
内容的提问来源于stack exchange,提问作者Sweepster
相关产品推荐
相关产品推荐

