| Author |
Topic |
|
scottjamieson
Starting Member
2 Posts |
Posted - 2004-04-22 : 06:45:40
|
| Hello!Your expert help is needed for a newbie to SQL!The point of this query is to give an hourly breakdown report which counts the reasons in which customers require call backs. I have the following two tables with the relationship being between the customer_id.Customer Table:customer_id Int 4batch_number varchar 5Callback Table:customer_id Int 4date_called date_time 8reason varchar 50preferred_time varchar 50agent varchar 50I have the following query which seems to work okay but as I need to query only bath_number = 'S001' I need to add the customers table - This is where I get stuck, and am not quite sure how to add it. (I am a beginner!!!!)Query:SELECT DISTINCT reason, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) < '11:00')) AS slot1, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) < '11:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '12:00')) AS slot2, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '12:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '13:00')) AS slot3, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '13:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '14:00')) AS slot4, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '14:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '15:00')) AS slot5, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '15:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '16:00')) AS slot6, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '16:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '17:00')) AS slot7, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '17:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '18:00')) AS slot8, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '18:00') AND (CONVERT(VARCHAR(10), date_called, 108) < '19:00')) AS slot9, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) AND (CONVERT(VARCHAR(10), date_called, 108) >= '19:00')) AS slot10, (SELECT COUNT(*) FROM Callback s2 WHERE s2.reason = s1.reason AND (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112))) AS slot11FROM dbo.Callback s1WHERE (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112))This returns the following results:Reason Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot7 Slot8 Slot9 Slot10 Slot11Answer Machine 0 0 60 181 125 179 98 97 50 71 861Decision maker not available 0 0 0 3 0 0 1 8 5 4 21Engaged 0 0 4 9 4 6 5 7 13 21 71No Answer 0 0 54 188 134 180 56 57 38 65 772Scheduled Callback 0 0 8 18 14 14 21 35 26 38 174If anyone could offer advice of how to add the 'INNERJOIN' effectively on customer_id so batch_number = 'S001' I would be so grateful!Thank you in advance.Scott |
|
|
mtomeo
Starting Member
30 Posts |
Posted - 2004-04-22 : 08:29:55
|
| I'm sure there's an easier way to write your query (using an inline view and a Case statement perhaps?), but I believe this should work...add to your final From/Where:FROM dbo.Callback s1, dbo.Customer c1WHERE (CONVERT(VARCHAR(10), date_called, 112) = CONVERT(VARCHAR(10), GETDATE() - 1, 112)) and s1.customer_id = c1.customer_id and c1.batch_number = 'S001' |
 |
|
|
scottjamieson
Starting Member
2 Posts |
Posted - 2004-05-07 : 09:00:15
|
| Thank you for your help on this. Could you give me any direction on how I could do this where batch_number is a parameter, which would be from a different table.Table Name: BatchesField Name:BatchNumber Values: S001, S002 S003 etcThanks |
 |
|
|
|
|
|