"name" "date" "hour" "calls" name1 date1 9 2 name1 date1 10 0 name1 date1 11 4 name1 date1 12 5 ...Is there a solution?
Requires Free Membership to View
There are several ways we can solve this problem. This time, I found a "helper" table useful. But first, here's our Calls table:
create table Calls
( Name varchar(10),
CallDate date,
CallHour numeric(2)
)
insert into Calls values ('Ada','01-JAN-2002',9);
insert into Calls values ('Ada','01-JAN-2002',9);
insert into Calls values ('Ada','01-JAN-2002',11);
insert into Calls values ('Ada','01-JAN-2002',11);
insert into Calls values ('Ada','01-JAN-2002',11);
insert into Calls values ('Ada','01-JAN-2002',11);
insert into Calls values ('Ada','01-JAN-2002',12);
insert into Calls values ('Ada','01-JAN-2002',12);
insert into Calls values ('Ada','01-JAN-2002',12);
insert into Calls values ('Ada','01-JAN-2002',12);
insert into Calls values ('Ada','01-JAN-2002',12);
We'll need a table of hours (our helper table):
create table Hours ( Hour numeric(2) ); begin insert into Hours values (0); insert into Hours values (1); insert into Hours values (2); insert into Hours values (3); insert into Hours values (4); insert into Hours values (5); insert into Hours values (6); insert into Hours values (7); insert into Hours values (8); insert into Hours values (9); insert into Hours values (10); insert into Hours values (11); insert into Hours values (12); insert into Hours values (13); insert into Hours values (14); insert into Hours values (15); insert into Hours values (16); insert into Hours values (17); insert into Hours values (18); insert into Hours values (19); insert into Hours values (20); insert into Hours values (21); insert into Hours values (22); insert into Hours values (23); commit; end;And here's our SQL with the results:
select Name, CallDate, Hour,
( select count(*) from Calls t
where t.Name = c.Name
and t.CallDate = c.CallDate
and t.CallHour = h.Hour ) "Total Calls"
from (select distinct Name, CallDate from Calls) c,
Hours h
Name CallDate Hour Total Calls
------- -------------- ------ -----------
Ada 1/1/2002 0 0
Ada 1/1/2002 1 0
Ada 1/1/2002 2 0
Ada 1/1/2002 3 0
Ada 1/1/2002 4 0
Ada 1/1/2002 5 0
Ada 1/1/2002 6 0
Ada 1/1/2002 7 0
Ada 1/1/2002 8 0
Ada 1/1/2002 9 2
Ada 1/1/2002 10 0
Ada 1/1/2002 11 4
Ada 1/1/2002 12 5
Ada 1/1/2002 13 0
Ada 1/1/2002 14 0
Ada 1/1/2002 15 0
Ada 1/1/2002 16 0
Ada 1/1/2002 17 0
Ada 1/1/2002 18 0
Ada 1/1/2002 19 0
Ada 1/1/2002 20 0
Ada 1/1/2002 21 0
Ada 1/1/2002 22 0
Ada 1/1/2002 23 0
For More Information
- Dozens more answers to tough SQL questions from Jason Law are available here.
- The Best SQL Web Links: tips, tutorials, scripts, and more.
- Have an SQL tip to offer your fellow DBAs and developers? The best tips submitted will receive a cool prize. Submit your tip today!
- Ask your technical SQL questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our SQL, database design, Oracle, SQL Server, DB2, metadata, object-oriented and data warehousing gurus are waiting to answer your toughest questions.
This was first published in November 2002

Join the conversationComment
Share
Comments
Results
Contribute to the conversation