Google sheet query select column from different spreadsheet - google-sheets

I have this query:
=Query({'Sheet request '!A2:Q;'Sheet sent '!A2:Q},"Select Col1,Col2,Col4,Col3 Where Col1 is not null",1)
How I am going to add this query so that I can have the column 12 from tab genseat?
=Query({genseat!A2:O},"Select Col12 Where Col1 is not null",1)

Since your first query generates 4 columns, you can only append a second query if you also generate 4 columns.
If you want 3 static columns of data in the second query, you could use something like:
=Query({genseat!A2:O},"Select Col12,'value1','value2','value3' Where Col1 is not null label 'value1' '','value2' '','value3' '' ",1)
Then you can add your queries together using {query1;query2} and put a third query around them to bring back records that are not null:
query({query1;query2},"where Col1 is not null",1)

Related

TextJoin the rows based on the Id's dates and sequence

I have been trying to concatinating the Specific column based on the ID's, dates and the sequence which are avaialble in the separate columns.
I have used 3 steps to get the result and the result is accurate but i want to use a single formula or Google sheets Query to achieve the final result.
I have added a google sheets for your reference and i would really appreciate your help in this regards.
1st step In this step i just Sorted out the data
=QUERY({'Raw Data'!A:F}, "SELECT Col2, Col3, Col4, Col5 Where Col2 is not null ORDER BY Col2 ASC, Col4 ASC, Col3 ASC")
2nd step From Sorted out data i have taken 2 column and make them unique then used textjoin function to concatenate the notes with before and after brackets.
=UNIQUE(QUERY(A2:D, "SELECT A,C"))
=TEXT(G3,"MM-DD-YYYY")&": ("&TEXTJOIN(" ",TRUE,FILTER(D:D,A:A=F3,C:C=G3))&")"
3rd step after all above steps i pulled the only unique id's then based on unique id's textjoin the notes
=UNIQUE(F2:F)
=TEXTJOIN(" ",TRUE,FILTER(H:H,F:F=L3))
Added formula to your sheet to test:
=index(let(a,sort({B2:E},1,1,3,1,2,1),b,unique(filter({index(a,,1),index(a,,3)},index(a,,1)<>"")),c,map(index(b,,1),index(b,,2),lambda(d,e,"("&join(" ",filter(index(a,,4),index(a,,1)=d,index(a,,3)=e))&")")),byrow(unique(tocol(index(b,,1),1)),lambda(z,{z,join(" ",unique(filter(TEXT(index(b,,2),"mm-dd-yyyy")&": "&c,index(b,,1)=z)))}))))

Google Sheets - Trying to use IMPORTRANGE to get student enrollments by school by date

I made columns that simply lists all the schools for each student under a date column header. I only need to count the schools - I don't want to see any student data. I have a form that needs to be submitted to the state and there is a cell with the date we are submitting. I want to use an IMPORTRANGE to go to the other spreadsheet and find the column where the date matches the form date and pull back the count of schools in that column. I tried using INDEX/MATCH, etc., and while I have those working on the form for other data already on my spreadsheet - I can't seem to get them to work on the 'outside' spreadsheet. Any help is appreciated! I'm attaching an example spreadsheet with more explanation. I hope it's clear. Thank you.
Example Document
ztiaa has provided a good solution. I will suggest another which pivots the data differently. I feel that having the dates go across columns is going to quickly become unwieldy. So this approach leaves the dates running down the right side with the schools running as column headers. My solution also includes exceptions such as snow days, as those will likely be important to see at a glance as well. Just be careful to use the same notation for such exceptions. For instance, always use "snowday" (not, eg., "snow day") or "prep day" (not, e.g., "prep").
In Sheet1, use IMPORTRANGE to bring in the data exactly as you have it listed in your sample sheet (i.e., dates at top, school names or exceptions under each date header).
Then, in a new sheet, place the following formula in cell A1:
=ArrayFormula({QUERY(SPLIT(FLATTEN(FILTER(Sheet1!1:1&"~"&INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!1:1<>"")),"~",1,0),"Select Col1, COUNT(Col1) WHERE Col2 Is Not Null GROUP BY Col1 PIVOT Col2 FORMAT Col1 'mmm dd'"),TRANSPOSE({"District Totals",MMULT(SEQUENCE(1,ROWS(Sheet1!A2:A),1,0),IF(FILTER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!1:1<>"")="",0,1))})})
This assumes that the first sheet is, in fact, named Sheet1. If it is not, you'll need to change every instance of that sheet name in the formula.
It will probably further aid visual ease if you freeze Row 1 and Column 1 (View > Freeze > 1 row / 1 column).
ADDENDUM (after seeing realistic copy of OP's sheet)
=ArrayFormula({TRANSPOSE(QUERY(SPLIT(FLATTEN(FILTER(Sheet1!1:1&"~"&INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")),"~",1,0),"Select Col1, COUNT(Col1) WHERE Col2 Is Not Null GROUP BY Col1 PIVOT Col2 FORMAT Col1 'mmm dd'"));{"District Totals",MMULT(SEQUENCE(1,ROWS(Sheet1!A2:A),1,0),IF(FILTER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")<>"",1,0))}})
If you prefer to see the name of the exception (e.g., "snowday") rather than the count of 1 for each exception in the "District totals" line:
=ArrayFormula({TRANSPOSE(QUERY(SPLIT(FLATTEN(FILTER(Sheet1!1:1&"~"&INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")),"~",1,0),"Select Col1, COUNT(Col1) WHERE Col2 Is Not Null GROUP BY Col1 PIVOT Col2 FORMAT Col1 'mmm dd'"));{"District Totals",IF(MMULT(SEQUENCE(1,ROWS(Sheet1!A2:A),1,0),IF(FILTER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")<>"",1,0))=1,FILTER(Sheet1!2:2,Sheet1!2:2<>""),MMULT(SEQUENCE(1,ROWS(Sheet1!A2:A),1,0),IF(FILTER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")<>"",1,0)))}})
If you want exceptions (e.g., "snowday") to always appear at the bottom instead of in alphabetical order within the school-name list:
=ArrayFormula({TRANSPOSE(QUERY(SPLIT(FLATTEN(FILTER(Sheet1!1:1&"~"&IF(REGEXMATCH(UPPER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A))),INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A))),,"‡")&INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")),"~",1,0),"Select Col1, COUNT(Col1) WHERE Col2 Is Not Null AND Col2 <> '‡' GROUP BY Col1 PIVOT Col2 FORMAT Col1 'mmm dd'"));{"District Totals",IF(MMULT(SEQUENCE(1,ROWS(Sheet1!A2:A),1,0),IF(FILTER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")<>"",1,0))=1,FILTER(Sheet1!2:2,Sheet1!2:2<>""),MMULT(SEQUENCE(1,ROWS(Sheet1!A2:A),1,0),IF(FILTER(INDIRECT("Sheet1!2:"&ROWS(Sheet1!A:A)),Sheet1!2:2<>"")<>"",1,0)))}})
Try this out
=ArrayFormula({query(split(flatten(text(A1:E1,"mmm/d")&"❄️"&A2:E),"❄️"),"select Col2, count(Col2) where not Col2 matches '|Snowday' group by Col2 pivot Col1");{"District Total",transpose(MMult(transpose(N(filter(A2:E,not(RegexMatch(A2:E2,"Snowday")))<>"")),sequence(rows(A2:E))^0))}})

issue with querying of multiple tabs inside same sheet

i am trying to query number of response, country name and month from one tab but i also need it to display the name of country corresponding to country number which is in a different tab
this is my statement
=QUERY({CSAT!$A$2:$F$34;Countries!$A$2:$B$11},"SELECT Col1, Col2, Col3, Col5 WHERE Col1 = 'Jun-21' ON Col2 = Col3 ")
i keep getting an error saying that there are missing values on lateral array
Number of columns from both sheets must be the same if you want to append them in the query. Using the query with different number of columns (6 vs 2) will result into:
If we get 2 columns from both sheets:
=QUERY({CSAT!$A$2:$B$34;Countries!$A$2:$B$11})
Error is not shown:

How can I separate a column into multiple columns based on values?

I have searched on a lot of pages but I cannot find a solution to my problem except in reverse order. I have simplified what I do, but I have a query that comes looking for information in my data sheet. Here there are 3 columns, the date, the amount and the source.
I would like, with a query function, to be able to make different columns which counts the information of column C based on the values of its cells per month, like this
I'm okay with the start of the formula
=QUERY(A2:C,"select month(A)+1, sum(B), count(C) where A is not null group by month(A)+1")
But as soon as I try a little different things by putting 2 query together in an arrayformula, obviously the row count doesn't match as some minus are 0 for some sources.
Do you have a solution for what I'm trying to do? Thank you in advance :)
Solution:
It's not possible in Google Query Language to have a single query statement that has one result grouped by one column and another result grouped by another.
The first two columns can be like this:
=QUERY(A2:C,"select month(A)+1, sum(B) where A is not null group by month(A)+1 label month(A)+1 'Month', sum(B) 'Amount'")
To create the column labels for the succeeding columns, use in the first row, in my example, I1:
=TRANSPOSE(UNIQUE(C2:C))
Then from cell I2, enter this:
=COUNTIFS(arrayformula(month($A$2:$A)),$G2,$C$2:$C,I$1)
Then drag horizontally and vertically to apply to the entire table.
Results:
try:
=INDEX({
QUERY({MONTH(A2:A), B2:C},
"select Col1,sum(Col2) where Col2 is not null group by Col1 label Col1'month',sum(Col2)'amount'"),
QUERY({MONTH(A2:A), B2:C, C2:C},
"select count(Col3) where Col2 is not null group by Col1 pivot Col4")})

Repeat rows in Google Sheets based in the number of unique column values

I have this table:
I need to create a timeframe model of it, in a day by day view but with one line for each Client, so it gets to look like this:
Number of clients may change with time, so it should somehow dynamically check the unique items in the Client column (UNIQUE(A2:A) would solve that) and use the number of unique clients to create the date repetitions and client repetitions per date.
Sample sheet here.
Is there a way out of that?
I think your data can be converted using this formula
=ArrayFormula(query(split(split(FLATTEN(A:A&"😎"&SUBSTITUTE(C1:D1;"Date of ";"")&"😎"&C:D&"*");"*");"😎");"select Col3, Col1, count(Col1) where Col3 is not null group by Col3, Col1 pivot Col2 order by Col3 label Col1'Client', Col3'Date'"))

Resources