I am attempting to wrie a query that will return aggregate totals from two different tables. The problem is that the TotalForecast totals are way to high.
How do I write a query to obtain the correct totals?
Table 1 - dbo.QM_Results
Columns - dbo.QM_Results.Special8, dbo.QM_Results.SessionName, dbo.QM_Results.PersonNumber
Table 2 - dbo.PM_ForecastView
Columns - dbo.PM_ForecastView.Hierarchy, dbo.PM_ForecastView.Forecast
Select substring(dbo.QM_Results.Special8,0,6) AS Hierarchy,
substring(dbo.QM_Results.SessionName,0,11) As CourseCode,
count(dbo.QM_Results.PersonNumber) TotalAssociates,
sum(dbo.PM_ForecastView.Forecast) TotalForecast
From dbo.QM_Results INNER JOIN dbo.PM_ForecastView
ON dbo.PM_ForecastView.Hierarchy = substring(dbo.QM_Results.Special8,0,6)
where SessionMid in ('96882139', '23620891', '45077427', '29721437')
AND substring(dbo.QM_Results.Special8,0,6) in ('EZHBA')
Group By substring(dbo.QM_Results.Special8,0,6),
substring(dbo.QM_Results.SessionName,0,11)
Sample of data returned with my current query.
Hierarchy CourseCode TotalAssociates TotalForecast
EZHBA CARD167200 1179 141480
EZHBA CARD167201 1416 169920
EZHBA CARD167202 1119 134280
EZHBA CARD167204 99 11880
Results when I run aggregate query separately
Actual Total taken
Hierarchy CourseCode TotalTaken
EZHBA CARD167200 393
EZHBA CARD167201 472
EZHBA CARD167202 373
EZHBA CARD167204 33
Forecasted Total taken
Hierarchy CourseCode Forecast
EZHBA CARD167200 999
EZHBA CARD167201 900
EZHBA CARD167202 800
EZHBA CARD167204 800
I strongly advise you to create real columns for Hierarchy and CourseCode. It will simplify everything, and querying with substring criteria is a disaster for performance.
Joining with a View is somewhat dangerous, since the query plan can give you more rows than you expect.
How is the View defined?
|||
Ok what is the best way to accomplish this.
I've attached sample data for each table. I just want to return Hierarchy, -- From Forecast table Course Code, -- From Forecast Table Total forecast, -- From Forecast table TotalActualAtteneded -- From PM_QMDetails table. Count(PersonNumber) Sample PM_QMActual Data |
ResultID | CourseCode | PersonNumber | SessionName | SessionMid | SessionLid | StartDate | EndDate | TotalScore | ScoreBandTitle | Hierarchy | HierarchyAll |
-371630300 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 16:02.0 | 24:00.0 | 7 | Failed | EZHBA | EZHBA...AC |
-371637743 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 24:52.0 | 25:54.0 | 10 | Passed | EZHBA | EZHBA...AC |
-371558197 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 28:49.0 | 33:34.0 | 6 | Failed | EZHBA | EZHBA...AC |
-371560271 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 34:30.0 | 35:50.0 | 7 | Failed | EZHBA | EZHBA...AC |
-371579578 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 36:44.0 | 37:57.0 | 10 | Passed | EZHBA | EZHBA...AC |
-371589091 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 45:13.0 | 46:32.0 | 4 | Failed | EZHBA | EZHBA...AC |
-371561743 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 47:22.0 | 48:01.0 | 6 | Passed | EZHBA | EZHBA...AC |
-357270804 | CARD167204 | 1 | CARD167204_More_Module_4_CUSTOMER_SATISFACTION | 29721437 | 56759259 | 33:50.0 | 36:23.0 | 11 | Passed | EZHBG | EZHBG...AA |
-382315943 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 41:46.0 | 43:31.0 | 6 | Passed | EZHBG | EZHBG...AA |
-382448705 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 50:22.0 | 53:59.0 | 10 | Passed | EZHBG | EZHBG...AA |
-382317954 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 04:08.0 | 12:43.0 | 9 | Passed | EZHBG | EZHBG...AA |
-374600403 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 45:46.0 | 48:11.0 | 9 | Passed | EZHBD | EZHBD...AA |
-374575303 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 49:04.0 | 32:44.0 | 9 | Passed | EZHBD | EZHBD...AA |
-373276591 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 40:34.0 | 41:25.0 | 3 | Failed | EZHBD | EZHBD...AA |
-373271117 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 42:16.0 | 42:54.0 | 6 | Passed | EZHBD | EZHBD...AA |
-374385179 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 30:21.0 | 34:36.0 | 6 | Passed | EZHBG | EZHBG...AA |
-374505709 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 38:42.0 | 47:07.0 | 9 | Passed | EZHBG | EZHBG...AA |
-374465177 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 52:39.0 | 02:01.0 | 10 | Passed | EZHBG | EZHBG...AA |
-357277598 | CARD167204 | 1 | CARD167204_More_Module_4_CUSTOMER_SATISFACTION | 29721437 | 56759259 | 33:58.0 | 39:13.0 | 12 | Passed | EZHBG | EZHBG...AA |
-381914391 | CARD167202 | 1 | CARD167202_More_Module_3 | 45077427 | 16904323 | 20:52.0 | 23:40.0 | 6 | Passed | EZHBA | EZHBA...AC |
-392795564 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 09:25.0 | 18:26.0 | 10 | Passed | EZHBA | EZHBA...AC |
-392798106 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 25:38.0 | 42:54.0 | 10 | Passed | EZHBA | EZHBA...AC |
-384293893 | CARD167200 | 1 | CARD167200_More_Module_1 | 96882139 | 39496741 | 35:57.0 | 40:01.0 | 8 | Passed | EZHBA | EZHBA...AC |
-384236041 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 45:29.0 | 52:54.0 | 5 | Failed | EZHBA | EZHBA...AC |
-384224651 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 54:54.0 | 56:13.0 | 7 | Failed | EZHBA | EZHBA...AC |
-384234655 | CARD167201 | 1 | CARD167201_More_Module_2 | 23620891 | 6382525 | 56:52.0 | 57:45.0 | 10 | Passed | EZHBA | EZHBA...AC |
Sample Forecast data
Site | Hierarchy | CourseCode | CourseName | StartTime | EndTime | Forecast |
Customer Satisfaction | EZHBA | CARD167202 | Module 3 | 8:00 AM | 6:00 PM | 800 |
Customer Satisfaction | EZHBD | CARD167201 | Module 2 | 5:00 PM | 9:00 PM | 100 |
Customer Satisfaction | EZHBG | CARD167202 | Module 3 | 1:00 PM | 9:00 PM | 25 |
Customer Satisfaction | EZHBD | CARD167204 | Module 4 | 8:00 AM | 5:00 PM | 300 |
Customer Satisfaction | EZHBD | CARD167201 | Module 2 | 10:00 AM | 5:00 PM | 145 |
Customer Satisfaction | EZHBA | CARD167204 | Module 4 | 8:00 AM | 12:00 PM | 100 |
Customer Satisfaction | EZHBG | CARD167204 | Module 4 | 6:00 AM | 9:00 AM | 300 |
Customer Satisfaction | EZHBG | CARD167202 | Module 3 | 9:00 AM | 5:00 PM | 45 |
Customer Satisfaction | EZHBA | CARD167201 | Module 2 | 8:00 AM | 6:00 PM | 900 |
Customer Satisfaction | EZHBA | CARD167204 | Module 4 | 8:00 AM | 6:00 PM | 700 |
Customer Satisfaction | EZHBA | CARD167200 | Module 1 | 1:00 AM | 9:00 AM | 999 |
|||
Something like this...
SELECT dt.Hierarchy, dt.CourseCode,dt.TotalForeCast,COUNT(d.PersonNumber)as TotalActualAttendedFROM(SELECT f.Hierarchy, f.CourseCode,SUM(ForeCast)as TotalForeCastFROM PM_ForecastGROUP BY f.Hierarchy, f.CourseCode) dtLEFTJOIN PM_QMDetails dON dt.Hierarchy=d.HierarchyAND dt.CourseCode=d.CourseCode
|||
Thanks that is exactly what I needed to get the final result. Here it is.
[Code]
SELECT dt.Hierarchy,
dt.CourseCode,
dt.TotalForeCast,
COUNT(d.PersonNumber)as TotalActualAttended
FROM
(
SELECT f.Hierarchy, f.CourseCode,SUM(ForeCast)as TotalForeCast
FROM dbo.PM_ForecastView f
GROUPBY f.Hierarchy, f.CourseCode
) dt
LEFTJOIN PM_QMDetails dON dt.Hierarchy=d.Hierarchy
AND dt.CourseCode=d.CourseCode
GroupBy dt.Hierarchy,
dt.CourseCode,
dt.TotalForeCast
[/CODE]
No comments:
Post a Comment