Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I tried to avoid using VBA for this due to my lack of familiarity, but it looks like this is complex enough to require the Excel native language.
What I have is a CSV with a list of employees hours worked each day, all in separate rows. Employee name, Date, Regular Hours, and OT Hours are in separate columns. The challenge is that for employee Bob, there may be 20 rows for one day. Bob applies a slice of time to different projects all day. Then of course there are multiple days and multiple employees. What I am trying to end up with is a report that shows all of the regular and OT hours (separately) for each employee on a daily basis.
What I can't wrap my head around is how to start the compilation. I am guessing that separating each employee would be the start. Then separating each date, then adding all hours for that date.
I appreciate any assistance.
Emp# Name Date Reg OT
Emp1 Bob 1/1/2016 8.00 0.00
Emp1 Bob 1/4/2016 3.00 0.00
Emp1 Bob 1/4/2016 5.00 0.00
Emp1 Bob 1/5/2016 2.00 0.00
Emp1 Bob 1/5/2016 1.00 0.00
Emp1 Bob 1/5/2016 5.00 0.00
Emp1 Bob 1/6/2016 1.00 0.00
Emp1 Bob 1/6/2016 2.00 0.00
Emp1 Bob 1/6/2016 5.00 0.00
Emp1 Bob 1/7/2016 2.00 0.00
Emp2 Henry 1/1/2016 8.00 0.00
Emp2 Henry 1/4/2016 8.00 0.00
Emp2 Henry 1/5/2016 8.00 0.00
Emp2 Henry 1/6/2016 2.00 0.00
Emp2 Henry 1/6/2016 6.00 0.00
Emp2 Henry 1/7/2016 1.50 0.00
Emp2 Henry 1/7/2016 0.50 0.00
Emp2 Henry 1/7/2016 6.00 0.00
Emp2 Henry 1/8/2016 8.00 0.00
Emp2 Henry 1/11/2016 8.00 0.00
Emp2 Henry 1/12/2016 3.00 0.00
Emp2 Henry 1/12/2016 1.00 0.00
Emp2 Henry 1/12/2016 3.00 0.00
Emp2 Henry 1/12/2016 1.00 0.00
Emp2 Henry 1/13/2016 1.50 0.00
Your description sounds like you want to use a pivot table. They are easy to build - this example literally took me 5 minutes to build, including typing in the data.
As an illustration, you can take data that looks like this ...
and consolidate it in a way that provides a lot of flexibility in looking at it. Such as this:
or this
There are several good, simple tutorials available on building Pivot Tables. A google search turns up plenty.
Related
I want to ask how to enter NULL in Table 2 with values in LITHOLOGY column.
Thanks
Table 1
LITHOLOGY
SITE_ID
DEPTH_FROM
DEPTH_TO
BXg
DB-01
0.00
4.50
BXg2
DB-01
4.50
10.00
BXg2
DB-02
4.00
10.00
BXg2
DB-02
0.00
4.00
Table 2
SITE_ID
DEPTH_FROM
DEPTH_TO
CORE_RECOV
LITHOLOGY
DB-01
0.00
2.00
0.20
DB-01
2.00
4.00
0.30
DB-01
4.00
6.00
0.22
DB-01
6.00
8.00
0.32
DB-01
8.00
10.00
0.42
DB-02
0.00
3.00
0.12
DB-02
3.00
5.00
0.42
DB-02
5.00
10.00
0.92
As per your question, the below will put NULL in every LITHOLOGY column where LITHOLOGY is not null.
If you want to replace blank fields with null use WHERE LITHOLOGY = '' instead
UPDATE Table2
SET LITHOLOGY = NULL
WHERE LITHOLOGY IS NOT NULL;
I have a pandas dataframe as below -
Federation Game Medal_each_game
0 AFG Athletics 1.00
1 AFG Boxing 0.00
2 AFG Football 1.00
3 AFG Hockey 0.00
4 AFG Taekwondo 2.00
5 AFG Wrestling 0.00
6 AHO Athletics 0.00
7 AHO Boxing 3.00
8 AHO Fencing 2.00
9 AHO Football 0.00
I need to find highest medal count per 'federation' and get the 'Game'
output should be something like this
Federation Game Medal_each_game
0 AFG Taekwondo 2.00
1 AHO Boxing 3.00
Use groupby_idxmax:
>>> df.loc[df.groupby('Federation')['Medal_each_game'].idxmax()]
Federation Game Medal_each_game
4 AFG Taekwondo 2.0
7 AHO Boxing 3.0
I am wondering if what I am trying to do is possible. I believe it is using the PIVOT function in TSQL but don't have enough experience with the PIVOT function to know where to start.
Basically I'm trying to take the following # table called #tmpbudgetdata (truncated for simplicity):
Account Description BudgetAmount Period
-------------------- ---------------------------------------------------------------------------------------------------- --------------------- --------------------
4001 Mood Embedded Account 0.00 1
4001 Mood Embedded Account 0.00 2
4001 Mood Embedded Account 0.00 3
4001 Mood Embedded Account 0.00 4
4001 Mood Embedded Account 0.00 5
4001 Mood Embedded Account 0.00 6
4001 Mood Embedded Account 0.00 7
4001 Mood Embedded Account 0.00 8
4001 Mood Embedded Account 0.00 9
4001 Mood Embedded Account 0.00 10
4001 Mood Embedded Account 0.00 11
4001 Mood Embedded Account 0.00 12
4003 DBS Music 0.00 1
4003 DBS Music 0.00 2
4003 DBS Music 0.00 3
4003 DBS Music 0.00 4
4003 DBS Music 0.00 5
4003 DBS Music 0.00 6
4003 DBS Music 0.00 7
4003 DBS Music 0.00 8
4003 DBS Music 0.00 9
4003 DBS Music 0.00 10
4003 DBS Music 0.00 11
4003 DBS Music 0.00 12
4010 Sales - Software 5040.00 1
4010 Sales - Software 0.00 2
4010 Sales - Software 6280.56 3
4010 Sales - Software 6947.93 4
4010 Sales - Software 4800.00 5
4010 Sales - Software 0.00 6
4010 Sales - Software 2400.00 7
4010 Sales - Software 2550.00 8
4010 Sales - Software 4800.00 9
4010 Sales - Software 2400.00 10
4010 Sales - Software 0.00 11
4010 Sales - Software 2400.00 12
4015 New Install Revenue 0.00 1
4015 New Install Revenue 0.00 2
4015 New Install Revenue 0.00 3
4015 New Install Revenue 3844.79 4
4015 New Install Revenue 0.00 5
4015 New Install Revenue 0.00 6
4015 New Install Revenue 0.00 7
4015 New Install Revenue 0.00 8
4015 New Install Revenue 0.00 9
4015 New Install Revenue 0.00 10
4015 New Install Revenue 0.00 11
4015 New Install Revenue 0.00 12
and turning it into something like this:
Account Description Period1 Period2 Period3 Period4 Period5 Period6 Period7 Period8 Period9 Period10 Period11 Period12
------- --------------- -------- ------- -------- ------ ------- ------- -------- ------ ------- -------- -------- --------
4001 Mood Enabled... 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
4003 Dbs Music 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
4010 Sales - Software 5040.00 0.00 6280.56 6947.93 4800.00 0.00 2400.00 2550.00 4800.00 2400.00 0.00 2400.00
...etc...
Basically just grouping via the Account column (the description is the same per account) and then taking the period values and pivoting them horizontally.
I know I could do it with a cursor and loop through but wondering if this is possible with a pivot or by other means.
Thanks in advance
I simple PIVOT should do the trick
Example
Select *
From (
Select [Account]
,[Description]
,Period = concat('Period',Period)
,[BudgetAmount]
From YourTable
) src
Pivot (sum([BudgetAmount]) for Period in ( [Period1],[Period2],[Period3],[Period4],[Period5],[Period6],[Period7],[Period8],[Period9],[Period10],[Period11],[Period12] ) ) pvt
Returns
594517 2018-11-30 5.00 0.00 0.00 0.00 8.00
594517 2018-12-18 0.00 0.00 0.00 0.00 5.00
Thanks all for the reply my situation if very hard to explain with out showing the code im dealing with,Basically the fix to a huge problem would be to get many rows with different dates into one row also adding all the totals for all those row into that same one row
column is the ID, date, the rest are total for services
I have created a table called KingLove which looks like this to try out something similar to what you're explaining on my own computer:
ID date service1 service2 service3 service4 service5
----------- ---------- --------- --------- --------- --------- ---------
594517 2018-11-30 5.00 0.00 0.00 0.00 8.00
594517 2018-12-18 0.00 0.00 0.00 0.00 5.00
If I then run this query:
select max(date) as [date], sum(service1) + sum(service2) + sum(service3) + sum(service4) + sum(service5) as [sum]
from KingLove
I get the service columns summed up and the latest date as the date for the entire row. Like this:
date sum
---------- --------
2018-12-18 18.00
You could swap the max in the query for a min if you want the oldest date instead.
It is not very easy to understand what your desired outcome would be, but I hope this is what your asking.
I have a Table (parts) where I store when an item was requested and when it was issued. With this, I can easily compute each items turn-around-time ("TAT"). What I'd like to do is have another column ("Computed") where any overlapping request-to-issue dates are properly computed.
RecID Requested Issued TAT Computed
MD0001 11/28/2012 12/04/2012 6.00 0.00
MD0002 11/28/2012 11/28/2012 0.00 0.00
MD0003 11/28/2012 12/04/2012 6.00 0.00
MD0004 11/28/2012 11/28/2012 0.00 0.00
MD0005 11/28/2012 12/10/2012 12.00 0.00
MD0006 11/28/2012 01/21/2013 54.00 54.00
MD0007 11/28/2012 11/28/2012 0.00 0.00
MD0008 11/28/2012 12/04/2012 6.00 0.00
MD0009 01/29/2013 01/30/2013 1.00 1.00
MD0010 01/29/2013 01/30/2013 1.00 0.00
MD0011 02/05/2013 02/06/2013 1.00 1.00
MD0012 02/07/2013 03/04/2013 25.00 25.00
MD0013 03/07/2013 03/14/2013 7.00 7.00
MD0014 03/07/2013 03/08/2013 1.00 0.00
MD0015 03/13/2013 03/25/2013 12.00 11.00
MD0016 03/20/2013 03/21/2013 1.00 0.00
Totals 133.00 99.00 <- waiting for parts TAT summary
In the above, I manually filled in the ("Computed") column so that there is an example of what I'm trying to accomplish.
NOTE: Notice how MD0013 affects the computed time for MD0015 as MD0013 was "computed" first. This could have been where MD0015 was computed first, then MD0013 would be affected accordingly - the net result is there is -1 day.