【问题标题】:Splitting each row of a table into multiple rows - Google Sheets将表格的每一行拆分为多行 - Google 表格
【发布时间】:2020-12-29 00:16:44
【问题描述】:

假设我在 google 表格中有一个如下所示的源表:

| Date       | Item A Quantity | Item A Cost | Item B Quantity | Item B Cost |
|------------|-----------------|-------------|-----------------|-------------|
| 2020-12-27 | 1               | 1.00        | 2               | 3.00        |
| 2020-12-26 | 12              | 1.50        | 5               | 2.00        |

我将如何格式化,以便每一行都是“原子的”并且只描述一个项目(与database normalization 不同)?在这个例子中,它看起来像这样(行的顺序无关紧要):


| Date       | Quantity        | Cost        | Item   |
|------------|-----------------|-------------|--------|
| 2020-12-27 | 1               | 1.00        | Item A |
| 2020-12-26 | 12              | 1.50        | Item A |
| 2020-12-27 | 2               | 3.00        | Item B |
| 2020-12-26 | 5               | 2.00        | Item B |

理想情况下,这需要是动态的,因为数据会定期更改,所以我认为数据透视表不会起作用。我试过使用QUERY,但到目前为止无济于事。

【问题讨论】:

  • 欢迎来到 StackOverflow tour。请阅读并遵守发布指南how to ask

标签: google-sheets google-sheets-formula


【解决方案1】:

使用:

=ARRAYFORMULA(SORT(SPLIT(QUERY(FLATTEN(IF(
 FILTER(B2:G, MOD(COLUMN(B:G)-1, 2)=0)<>"", 
 TO_TEXT(A2:A)&"×"&FILTER(B2:G, MOD(COLUMN(B:G), 2)=0)&"×"&
 FILTER(B2:G, MOD(COLUMN(B:G)-1, 2)=0), )), 
 "where Col1 is not null"), "×"), 2, 0))


然后:

=ARRAYFORMULA(SORT(SPLIT(QUERY(FLATTEN(IF(
 FILTER(B2:G, MOD(COLUMN(B:G)-1, 2)=0)<>"", 
 TO_TEXT(A2:A)&"×"&FILTER(B2:G, MOD(COLUMN(B:G), 2)=0)&"×"&
 FILTER(B2:G, MOD(COLUMN(B:G)-1, 2)=0)&"×"&REGEXREPLACE(
 FILTER(B1:G1, MOD(COLUMN(B:G)-1, 2)=0), " Quantity| Cost", ), )), 
 "where Col1 is not null"), "×"), 4, 1))

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多