Home > Blockchain >  How to use Google Query to combine multiple rows into a single row with IF & SUM
How to use Google Query to combine multiple rows into a single row with IF & SUM

Time:01-26

We can get the following raw data from our project management software:


Month Project Billable Time
Jan 2022 Project 1 Yes 100
Jan 2022 Project 1 No 10
Feb 2022 Project 1 Yes 80
Feb 2022 Project 1 No 30
Jan 2022 Project 2 Yes 60
Jan 2022 Project 2 No 5
Feb 2022 Project 2 Yes 90
Feb 2022 Project 2 No 15

I need to change this data to the following format:


Month Project Billable Time Non-Billable Time Total Time
Jan 2022 Project 1 100 10 110
Feb 2022 Project 1 80 30 110
Jan 2022 Project 2 60 5 65
Feb 2022 Project 2 90 15 105

Putting the raw data into a Google Sheet I thought this might be possible using Google Query. I started with this:

=QUERY(dataRange,"SELECT Month,Project,SUM(Time) GROUP BY Month, Project")

But I can't work out how to separate Billable & Non-Billable time & include this on a single row with the SUM of both times. Is this even possible using =QUERY?

If =QUERY can be used, what syntax should I use?

If =QUERY can't be used, what method should I use instead?

CodePudding user response:

Use the QUERY pivot clause like this (assuming your source table is in A1:D9 of your sheet):

=query(query({A1:D9},"select Col1,Col2,sum(Col4) group by Col1,Col2 pivot Col3 order by Col2",1),"select Col1,Col2,Col4,Col3,Col3 Col4 label Col3 'Billable time',Col4 'Non-billable time',Col3 Col4 'Total time'",1)

CodePudding user response:

You can also try:

={{A1:B1,C1&" "&D1,"Non- "&C1&" "&D1,"Total "&D1};INDEX(BYROW(UNIQUE(FILTER(A2:A&"|"&B2:B,A2:A<>"")),LAMBDA(ax,{SPLIT(ax,"|",0,0),SUMIFS(D:D,C:C,"Yes",A:A&"|"&B:B,ax),SUMIFS(D:D,C:C,"No",A:A&"|"&B:B,ax),SUMIFS(D:D,A:A&"|"&B:B,ax)})))}

enter image description here

  • Related