I'm trying to figure out how to produce this result in SQL using pivot table Sorted by SubID
units | Sub | SubCode | AM | PM |
---|---|---|---|---|
3 | Math | M2201 | Monday / 7:00AM-8:00AM | Tuesday / 1:00PM-2:00PM |
3 | Science | S2203 | Monday / 9:00AM-10:00AM | Tuesday / 3:00PM-4:00PM |
3 | Comp (lab) | C2203 | Friday / 9:00AM-10:00AM | Wednesday / 3:00PM-4:00PM |
2 | Comp (lec) | C2203 | Thursday / 9:00AM-10:00AM Friday / 7:00AM-8:00AM |
Tuesday / 3:00PM-4:00PM |
Originally, I have 3 tables where I pull out data.
table SetSub
ssID | AY | Prog | YLev | Sem | SubCode |
---|---|---|---|---|---|
1 | 2022-2023 | Intermediate | 3 | 2 | M2201 |
2 | 2022-2023 | Intermediate | 3 | 2 | S2203 |
2 | 2022-2023 | Intermediate | 3 | 2 | C2203 |
table Sched
schedID | Prog | Sem | SubCode | Sub | Units | Shift | SubType | Day | Sched | isLecLab |
---|---|---|---|---|---|---|---|---|---|---|
1 | Intermediate | 2 | M2201 | Math | 3 | AM | Lec | Monday | 7:00AM-8:00AM | 0 |
2 | Intermediate | 2 | M2201 | Math | 3 | PM | Lec | Tuesday | 1:00PM-2:00PM | 0 |
3 | Intermediate | 2 | S2203 | Science | 3 | AM | Lec | Monday | 9:00AM-10:00AM | 0 |
4 | Intermediate | 2 | S2203 | Science | 3 | PM | Lec | Tuesday | 3:00PM-4:00PM | 0 |
5 | Intermediate | 2 | C2203 | Comp | 2 | AM | Lec | Thursday | 9:00AM-10:00AM | 1 |
6 | Intermediate | 2 | C2203 | Comp | 2 | AM | Lec | Friday | 7:00AM-8:00AM | 1 |
7 | Intermediate | 2 | C2203 | Comp | 2 | PM | Lec | Tuesday | 3:00PM-4:00PM | 1 |
8 | Intermediate | 2 | C2203 | Comp | 3 | AM | Lab | Friday | 9:00AM-10:00AM | 1 |
9 | Intermediate | 2 | C2203 | Comp | 3 | PM | Lab | Wednesday | 3:00PM-4:00PM | 1 |
table Subjects
subid | Sub | SubCode | Units | isLecLab |
---|---|---|---|---|
1 | Math | M2201 | 3 | 0 |
2 | Science | S2203 | 3 | 1 |
3 | Comp | C2203 | 5 | 0 |
Added an image since table get messed up upon saving the post
But created a new table for this.
subid | units | sub | UserCode | Shift | Sched |
---|---|---|---|---|---|
1 | 3 | Math | M2201 | AM | Monday / 7:00AM-8:00AM |
1 | 3 | Math | M2201 | PM | Tuesday / 1:00PM-2:00PM |
2 | 3 | Science | S2203 | AM | Monday / 9:00AM-10:00AM |
2 | 3 | Science | S2203 | PM | Tuesday / 3:00PM-4:00PM |
3 | 3 | Comp (lab) | C2203 | AM | Friday / 9:00AM-10:00AM |
3 | 2 | Comp (lab) | C2203 | PM | Wednesday / 3:00PM-4:00PM |
3 | 3 | Comp (lec) | C2203 | AM | Thursday / 9:00AM-10:00AM |
3 | 2 | Comp (lec) | C2203 | PM | Tuesday / 3:00PM-4:00PM |
3 | 2 | Comp (lec) | C2203 | PM | Friday / 7:00AM-8:00AM |
I tried several queries and the closest I've got is this
units | Sub | Code | AM | PM |
---|---|---|---|---|
3 | Math | M2201 | Monday / 7:00AM-8:00AM | Tuesday / 1:00PM-2:00PM |
3 | Science | S2203 | Monday / 9:00AM-10:00AM | Tuesday / 3:00PM-4:00PM |
3 | Comp (lab) | C2203 | Thursday / 9:00AM-10:00AM | Tuesday / 3:00PM-4:00PM |
3 | Comp (lab) | C2203 | Friday / 9:00AM-10:00AM | Wednesday / 3:00PM-4:00PM |
2 | Comp (lec) | C2203 | Thursday / 9:00AM-10:00AM | Tuesday / 3:00PM-4:00PM |
2 | Comp (lec) | C2203 | Friday / 9:00AM-10:00AM | Wednesday / 3:00PM-4:00PM |
Second data for AM of comp (lec) didn't appear. Here's the code I've tried
select a.usercode, a.sub, a.Units, a.am, b.pm, a.Schedid from
(select * from
(select distinct subid, usercode, sub, units, shift, sched from Table1 where shift= 'am') as src
pivot (max(sched) for shift in ("am")) as pvt ) as A
inner join
(select * from
(select distinct subid, usercode, sub, units, shift, sched from table1 where shift= 'pm') as src2
pivot (max(sched) for shift in ("pm")) as pvt2 ) as B on a.shift= b.shift