Transpose Unique Values from Multiple Columns - google-sheets

I'm trying to generate unique values in D1:F but my formula is not working. For example, row 1 has
A B C
milk milk 44
the output should be:
D E
milk 44
here is my formula and my sheet
=ARRAYFORMULA(unique(A1:C))

UNIQUE works only in one dimension (row or column)
=QUERY(UNIQUE({A:A;B:B;C:C}), "where Col1 is not null", 0)
=ARRAYFORMULA(SPLIT(REGEXREPLACE(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE({QUERY(QUERY(
UNIQUE(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(LEN(A2:A), "♠"&A2:A&"♦"&B2:D, )),,999^99)),,999^99)), "♠")), "♦")),
"select Col1, count(Col1) where Col1 is not null group by Col1 pivot Col2", 0),
"select Col1 offset 1",0),
IF(QUERY(QUERY(UNIQUE(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(LEN(A2:A), "♠"&A2:A&"♦"&B2:D, )),,999^99)),,999^99)), "♠")), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0), "offset 1",0)<>"",
QUERY(QUERY(UNIQUE(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(LEN(A2:A), "♠"&A2:A&"♦♀"&B2:D&",", )),,999^99)),,999^99)), "♠")), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0), "limit 0",1),)})
,,999^99))), ", ♀", ", "), ",$", ), "♀"))

Related

Troublesome syntax - ArrayFormula + CONC + Filter

Example
I have this line:
=ARRAYFORMULA(IFERROR(CONCATENATE(SORT(FILTER('Personale-vagter-AFKRYDS'!$B$3:$B$7 & " ",ARRAYFORMULA('Personale-vagter-AFKRYDS'!**G3**:**G7**=TRUE)),1,TRUE)),"error"))
...And it works, but when I try to expand from G3 + G7 to this (C3 + G37):
=ARRAYFORMULA(IFERROR(CONCATENATE(SORT(FILTER('Personale-vagter-AFKRYDS'!$B$3:$B$7 & " ",ARRAYFORMULA('Personale-vagter-AFKRYDS'!**C3**:**G37**=TRUE)),1,TRUE)),"fejl"))
... It doesn't work.
What am I doing wrong?
all ranges in FILTER needs to be the same size. try:
=ARRAYFORMULA(IFERROR(CONCATENATE(SORT(
FILTER('Personale-vagter-AFKRYDS'!B3:B37&" ",
'Personale-vagter-AFKRYDS'!G3:G37=TRUE), 1, 1)),"error"))
UPDATE:
=ARRAYFORMULA(IFNA({
VLOOKUP(LEFT(A3:A, 1)*1, SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(SPLIT(TRANSPOSE(SPLIT(
QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(CC!C3:C=TRUE, "♦"&IF(CC!B3:B="",,VLOOKUP(
ROW(CC!A3:A), IF(CC!A3:A<>"", {ROW(CC!A3:A), CC!A3:A}), 2, 1))&"♥"&"♠"&CC!B3:B, ))
,,9^9)),,9^9), "♦")), "♠"), "select max(Col2) where Col2 !='' group by Col2 pivot Col1")
,,9^9))), "♥"), 2, 0),
VLOOKUP(LEFT(A3:A, 1)*1, SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(SPLIT(TRANSPOSE(SPLIT(
QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(CC!D3:D=TRUE, "♦"&IF(CC!B3:B="",,VLOOKUP(
ROW(CC!A3:A), IF(CC!A3:A<>"", {ROW(CC!A3:A), CC!A3:A}), 2, 1))&"♥"&"♠"&CC!B3:B, ))
,,9^9)),,9^9), "♦")), "♠"), "select max(Col2) where Col2 !='' group by Col2 pivot Col1")
,,9^9))), "♥"), 2, 0),
VLOOKUP(LEFT(A3:A, 1)*1, SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(SPLIT(TRANSPOSE(SPLIT(
QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(CC!E3:E=TRUE, "♦"&IF(CC!B3:B="",,VLOOKUP(
ROW(CC!A3:A), IF(CC!A3:A<>"", {ROW(CC!A3:A), CC!A3:A}), 2, 1))&"♥"&"♠"&CC!B3:B, ))
,,9^9)),,9^9), "♦")), "♠"), "select max(Col2) where Col2 !='' group by Col2 pivot Col1")
,,9^9))), "♥"), 2, 0),
VLOOKUP(LEFT(A3:A, 1)*1, SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(SPLIT(TRANSPOSE(SPLIT(
QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(CC!F3:F=TRUE, "♦"&IF(CC!B3:B="",,VLOOKUP(
ROW(CC!A3:A), IF(CC!A3:A<>"", {ROW(CC!A3:A), CC!A3:A}), 2, 1))&"♥"&"♠"&CC!B3:B, ))
,,9^9)),,9^9), "♦")), "♠"), "select max(Col2) where Col2 !='' group by Col2 pivot Col1")
,,9^9))), "♥"), 2, 0),
VLOOKUP(LEFT(A3:A, 1)*1, SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(SPLIT(TRANSPOSE(SPLIT(
QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(CC!G3:G=TRUE, "♦"&IF(CC!B3:B="",,VLOOKUP(
ROW(CC!A3:A), IF(CC!A3:A<>"", {ROW(CC!A3:A), CC!A3:A}), 2, 1))&"♥"&"♠"&CC!B3:B, ))
,,9^9)),,9^9), "♦")), "♠"), "select max(Col2) where Col2 !='' group by Col2 pivot Col1")
,,9^9))), "♥"), 2, 0)}))
Please use this in B3 and drag in other cells
ARRAYFORMULA(IFERROR(CONCATENATE(SORT(FILTER(OFFSET('Personale-vagter-AFKRYDS'!$B$3:$B$37,0+(5*(row(A1)-1)),0,5,1) & " ",OFFSET('Personale-vagter-AFKRYDS'!C$3:C$37,0+(5*(row(A1)-1)),0,5,1)=TRUE),1,TRUE)),"fejl"))

Google Sheets arrayformula vlookup transpose matching values and return all unique values in another sheet

I need an arrayformula to lookup all matching cells in another sheet and transpose and return all corresponding unique values.
Here is my sheet:
https://docs.google.com/spreadsheets/d/1uqeM6M9MAPehgyqyRLmH9mgg3Jh_RUSxADMisarht5Y/edit?usp=sharing
I've tried this but it doesn't work:
=ARRAYFORMULA(IFERROR(VLOOKUP(TRANSPOSE(A2:A), Sheet2!A2:B, 2, 0)))
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A,
{SORT(UNIQUE(INDIRECT("Sheet2!A2:A"&COUNTA(Sheet2!A2:A)+1))),
SPLIT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(ISNUMBER(QUERY(QUERY(UNIQUE(Sheet2!A2:B),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0), "offset 1", 0)),
"♦"&QUERY(UNIQUE(Sheet2!A2:B),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2 limit 0", 0), ))
,,999^99))), "♦")}, {1,2,3,4,5,6}, 0))

How can I JOIN the ARRAY results of this formula with a ","?

I've tried to add JOIN to this formula in every place I can think of, but none seem to be correct.
=ARRAYFORMULA(IFERROR(VLOOKUP(D2:D&E2:E,
TRIM(IFERROR(SPLIT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
{INDEX(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(tasksAssociations!C2:C&tasksAssociations!D2:D))*(LEN(tasksAssociations!G2:G)),
tasksAssociations!C2:C&tasksAssociations!D2:D&"♦"&tasksAssociations!G2:G, )), 1, 1), "♦")),
"select Col1,count(Col1) where Col1 is not null group by Col1 pivot Col2", 0),,1), IF(
ISNUMBER(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(tasksAssociations!C2:C&tasksAssociations!D2:D))*(LEN(tasksAssociations!G2:G)),
tasksAssociations!C2:C&tasksAssociations!D2:D&"♦"&tasksAssociations!G2:G, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0)),
QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(tasksAssociations!C2:C&tasksAssociations!D2:D))*(LEN(tasksAssociations!G2:G)),
tasksAssociations!C2:C&tasksAssociations!D2:D&"♦♥"&tasksAssociations!G2:G, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2 limit 0", 0), )})
,,999^99))), "♥"))), {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}, 0)))
The results are multiple columns/rows. I want to keep the rows, but JOIN the column values with a ",".
my sheet
like this perhaps:
=ARRAYFORMULA(SUBSTITUTE(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(SUBSTITUTE(IFERROR(VLOOKUP(D2:D&E2:E,
TRIM(IFERROR(SPLIT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
{INDEX(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(tasksAssociations!C2:C&tasksAssociations!D2:D))*(LEN(tasksAssociations!G2:G)),
tasksAssociations!C2:C&tasksAssociations!D2:D&"♦"&tasksAssociations!G2:G, )), 1, 1), "♦")),
"select Col1,count(Col1) where Col1 is not null group by Col1 pivot Col2", 0),,1), IF(
ISNUMBER(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(tasksAssociations!C2:C&tasksAssociations!D2:D))*(LEN(tasksAssociations!G2:G)),
tasksAssociations!C2:C&tasksAssociations!D2:D&"♦"&tasksAssociations!G2:G, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0)),
QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(tasksAssociations!C2:C&tasksAssociations!D2:D))*(LEN(tasksAssociations!G2:G)),
tasksAssociations!C2:C&tasksAssociations!D2:D&"♦♥"&tasksAssociations!G2:G, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2 limit 0", 0), )})
,,999^99))), "♥"))), {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}, 0)), " ", "♫")),,999^99))), " ", ", "), "♫", " "))

Search 2 columns and return all matches in a transposed row

I'm trying to take this QUERY:
=IFERROR(TRANSPOSE(QUERY(Items!$A$2:$D,"SELECT D WHERE A = '"&A2&"' and B = '"&B2&"' and C = '"&C2&"' and C is not NULL and D is not NULL", 0)),)
And turn it into a formula that I can enter one time at the top of a sheet and have it apply to all cells in the column below.
I've tried manipulating various other formulas and answers I've found/received here on SO, but getting nothing but errors.
My sheet
=ARRAYFORMULA(IFERROR(VLOOKUP(Estimate!A2:A&Estimate!B2:B,
TRIM(IFERROR(SPLIT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
{INDEX(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(Items!A2:A&Items!B2:B))*(LEN(Items!C2:C)),
Items!A2:A&Items!B2:B&"♦"&Items!C2:C, )), 1, 1), "♦")),
"select Col1,count(Col1) where Col1 is not null group by Col1 pivot Col2", 0),,1), IF(
ISNUMBER(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(Items!A2:A&Items!B2:B))*(LEN(Items!C2:C)),
Items!A2:A&Items!B2:B&"♦"&Items!C2:C, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0)),
QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(Items!A2:A&Items!B2:B))*(LEN(Items!C2:C)),
Items!A2:A&Items!B2:B&"♦♥"&Items!C2:C, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2 limit 0", 0), )})
,,999^99))), "♥"))), {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}, 0)))
Thank you for that enormous formula! And to think I was trying to accomplish this using a simple FILTER. Would this be the appropriate modification to include another column (column C) in the search criteria?
=ARRAYFORMULA(IFERROR(VLOOKUP('task-itemAssociationsDV'!A2:A&'task-itemAssociationsDV'!B2:B&'task-itemAssociationsDV'!C2:C,
TRIM(IFERROR(SPLIT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
{INDEX(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(taskData!A2:A&taskData!B2:B&taskData!C2:C))*(LEN(taskData!D2:D)),
taskData!A2:A&taskData!B2:B&taskData!C2:C&"♦"&taskData!D2:D, )), 1, 1), "♦")),
"select Col1,count(Col1) where Col1 is not null group by Col1 pivot Col2", 0),,1), IF(
ISNUMBER(QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(taskData!A2:A&taskData!B2:B&taskData!C2:C))*(LEN(taskData!D2:D)),
taskData!A2:A&taskData!B2:B&taskData!C2:C&"♦"&taskData!D2:D, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2", 0)),
QUERY(IFERROR(SPLIT(SORT(UNIQUE(IF((LEN(taskData!A2:A&taskData!B2:B&taskData!C2:C))*(LEN(taskData!D2:D)),
taskData!A2:A&taskData!B2:B&taskData!C2:C&"♦♥"&taskData!D2:D, )), 1, 1), "♦")),
"select count(Col1) where Col1 is not null group by Col1 pivot Col2 limit 0", 0), )})
,,999^99))), "♥"))), {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}, 0)))

How to take vertical data, and extract it horizontally, based on flag column In Google Sheets?

I have the following data format in Google Sheets:
I want to extract out the Quantity column into 2 separate columns based on if the Ready flag is Y or N. The Item Name and Size would be the group By columns, along with the Ready flag. Below is the data format I would like after the query runs:
Have not tried any solutions yet, as I have been out of the programming loop for a long time and am super rusty with SQL.
={"Item name", "Size", "Not ready", "Ready";
{QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col1, Col2", 0),
ARRAYFORMULA(ARRAY_CONSTRAIN(IFERROR(VLOOKUP(QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col1", 0)&
QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col2", 0),
QUERY(QUERY({A2:A&B2:B, C2:D},
"select *", 0),
"select Col1, Col2, Col3
where Col3='N'", 0), 2, 0), 0),
COUNTA(QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col1,Col2", 0))/2, 1)),
ARRAYFORMULA(ARRAY_CONSTRAIN(IFERROR(VLOOKUP(QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col1", 0)&
QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col2", 0),
QUERY(QUERY({A2:A&B2:B, C2:D},
"select *", 0),
"select Col1, Col2, Col3
where Col3='Y'", 0), 2, 0), 0),
COUNTA(QUERY(QUERY(QUERY(A2:D,
"select *", 0),
"select Col1, Col2, count(Col1)
where Col2 is not null
group by Col1, Col2
order by Col1 desc
label count(Col1)''", 0),
"select Col1,Col2", 0))/2, 1))}}
=ARRAYFORMULA(IF(NOT(ISBLANK(QUERY(QUERY(A1:D,
"select *", 1),
"select Col1, Col2, sum(Col3)
where Col1 <> ''
group by Col1, Col2
pivot Col4
order by Col1 desc", 1))),
QUERY(QUERY(QUERY(A1:D,
"select *", 1),
"select Col1, Col2, sum(Col3)
where Col1 <> ''
group by Col1, Col2
pivot Col4
order by Col1 desc", 1),
"select *
label Col3 'Not ready', Col4 'Ready'", 1), 0))
You could also do it as pivot table - works fairly well. Item name and size are entered as rows, Ready? as columns and sum(Quantity) as value.
Or indeed as a pivot query
=QUERY(A:D,"SELECT A,B,sum(C) where A<>'' group by A,B pivot D ")

Resources