Google 带有特殊转置的工作表查询
Google Sheets query with special transpose
我正在努力编写一个看起来比预期更复杂的查询,这里是要处理的数据示例
CW6
CW7
CW8
CW9
A
B
C
A
B
D
E
B
这里是最后的预期结果:
Item
CW
A
"CW6 CW9"
B
"CW6 CW7 CW9"
C
"CW8"
D
"CW7"
E
"CW8"
知道如何实现吗?
我在许多步骤中尝试过的:
=transpose(query(<data>,"Select *",1))
转置我的数据
然后我用了
=transpose(
query(
transpose(<data transposed>),,9^9
)
)
连接所有列
然后我select我想要检索列的所有唯一值header (CWxx)
=query(
unique(flatten(<Data>)),
"Select Col1 where Col1 is not null"
)
最后,我将转置的数据加入一个字符串(即 1 列)中:
=JOIN(" ", QUERY(< data transposed and joined>,"SELECT Col2 WHERE Col1 contains '"&A1&"'",0))
最后我得到了想要的数组,但我必须在每一行上复制最后一个连接公式,这是我不想做的,因为我的值是动态的
知道如何实现这个(或避免所有这些步骤的更简单方法)吗?
尝试:
=ARRAYFORMULA({QUERY(SORT(UNIQUE(FLATTEN(A2:D))),
"where Col1 is not null"), TRIM(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(
IFERROR(SPLIT(FLATTEN(IF(A2:D="",,A2:D&"×"&A1:D1&"×"&A1:D1)), "×")),
"select max(Col3) where Col2 is not null group by Col1 pivot Col2"),
"offset 1", 0)),,9^9)))})
或:
=ARRAYFORMULA({QUERY(SORT(UNIQUE(FLATTEN(A2:D))),
"where Col1 is not null"), """"&TRIM(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(
IFERROR(SPLIT(FLATTEN(IF(A2:D="",,A2:D&"×"&A1:D1&"×"&A1:D1)), "×")),
"select max(Col3) where Col2 is not null group by Col1 pivot Col2"),
"offset 1", 0)),,9^9)))&""""})
更新:
=ARRAYFORMULA({QUERY(TO_TEXT(SORT(UNIQUE(FLATTEN(A2:D)))),
"where Col1 is not null", 0), TRIM(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(TO_TEXT(
IFERROR(SPLIT(FLATTEN(IF(A2:D="",,A2:D&"×"&A1:D1&"×"&A1:D1)), "×"))),
"select max(Col3) where Col2 is not null group by Col1 pivot Col2"),
"offset 1", 0)),,9^9)))})
我正在努力编写一个看起来比预期更复杂的查询,这里是要处理的数据示例
CW6 | CW7 | CW8 | CW9 |
---|---|---|---|
A | B | C | A |
B | D | E | B |
这里是最后的预期结果:
Item | CW |
---|---|
A | "CW6 CW9" |
B | "CW6 CW7 CW9" |
C | "CW8" |
D | "CW7" |
E | "CW8" |
知道如何实现吗? 我在许多步骤中尝试过的:
=transpose(query(<data>,"Select *",1))
转置我的数据
然后我用了
=transpose(
query(
transpose(<data transposed>),,9^9
)
)
连接所有列
然后我select我想要检索列的所有唯一值header (CWxx)
=query(
unique(flatten(<Data>)),
"Select Col1 where Col1 is not null"
)
最后,我将转置的数据加入一个字符串(即 1 列)中:
=JOIN(" ", QUERY(< data transposed and joined>,"SELECT Col2 WHERE Col1 contains '"&A1&"'",0))
最后我得到了想要的数组,但我必须在每一行上复制最后一个连接公式,这是我不想做的,因为我的值是动态的
知道如何实现这个(或避免所有这些步骤的更简单方法)吗?
尝试:
=ARRAYFORMULA({QUERY(SORT(UNIQUE(FLATTEN(A2:D))),
"where Col1 is not null"), TRIM(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(
IFERROR(SPLIT(FLATTEN(IF(A2:D="",,A2:D&"×"&A1:D1&"×"&A1:D1)), "×")),
"select max(Col3) where Col2 is not null group by Col1 pivot Col2"),
"offset 1", 0)),,9^9)))})
或:
=ARRAYFORMULA({QUERY(SORT(UNIQUE(FLATTEN(A2:D))),
"where Col1 is not null"), """"&TRIM(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(
IFERROR(SPLIT(FLATTEN(IF(A2:D="",,A2:D&"×"&A1:D1&"×"&A1:D1)), "×")),
"select max(Col3) where Col2 is not null group by Col1 pivot Col2"),
"offset 1", 0)),,9^9)))&""""})
更新:
=ARRAYFORMULA({QUERY(TO_TEXT(SORT(UNIQUE(FLATTEN(A2:D)))),
"where Col1 is not null", 0), TRIM(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(TO_TEXT(
IFERROR(SPLIT(FLATTEN(IF(A2:D="",,A2:D&"×"&A1:D1&"×"&A1:D1)), "×"))),
"select max(Col3) where Col2 is not null group by Col1 pivot Col2"),
"offset 1", 0)),,9^9)))})