SET NOCOUNT ON
SET DATEFORMAT YMD
SET DATEFIRST 1
DECLARE @T TABLE (ID INT IDENTITY(1,1), VisitDate DATETIME, Page NVARCHAR(128),
NbVisitors INT)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-23','Home',10)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-24','Home',14)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-26','Home',22)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-27','Home',3)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-29','Home',4)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-04-01','Home',33)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-04-03','Home',2)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-26','Contact',22)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-27','Contact',10)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-29','Contact',35)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-30','Contact',13)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-27','Products',8)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-03-29','Products',12)
INSERT INTO @T (VisitDate,Page,NbVisitors) VALUES ('2009-04-01','Products',16)
select "PERIOD_ID"
= case a.ID
when 1 then convert(varchar, datepart(yy, min(b.VisitDate))) +
convert(varchar, datepart(ww, min(b.VisitDate))) +
convert(varchar, datepart(dw, min(b.VisitDate)))
when 2 then convert(varchar, datepart(yy, min(b.VisitDate))) +
convert(varchar, datepart(ww, min(b.VisitDate))) + 'T'
when 3 then convert(varchar, datepart(yy, min(b.VisitDate))) + 'T'
end
,"LEVEL"
= a.ID -1
from @T a, @T b
where a.ID <= 3
select
"PERIOD_ID"
= case a.ID
when 1 then convert(varchar, datepart(yy, min(b.VisitDate))) +
convert(varchar, datepart(ww, min(b.VisitDate))) +
convert(varchar, datepart(dw, min(b.VisitDate)))
when 2 then
convert(varchar, datepart(yy, min(b.VisitDate))) +
convert(varchar, datepart(ww, min(b.VisitDate))) + 'T'
when 3 then convert(varchar, datepart(yy, min(b.VisitDate))) + 'T'
end
,"LEVEL"
= a.ID -1
,"PERIOD"
= case a.ID
when 1 then
case datepart(dw, min(b.VisitDate))
when 1 then 'MON' when 2 then 'TUE' when 3 then 'WED' when 4 then 'THU'
when 5 then 'FRI' when 6 then 'SAT' when 7 then 'SUN'
end
+ ' ' + convert(varchar, datepart(dd, min(b.VisitDate))) + '/' +
convert(varchar, datepart(mm, min(b.VisitDate)))
when 2 then
'TOTAL WEEK ' + convert(varchar, datepart(ww, min(b.VisitDate)))
when 3 then
'TOTAL YEAR ' + convert(varchar, datepart(yy, min(b.VisitDate)))
end
,"HOME"
= sum(case when b.Page = 'Home' then b.NbVisitors else 0 end)
,"CONTACT"
= sum(case when b.Page = 'Contact' then b.NbVisitors else 0 end)
,"PRODUCTS"
= sum(case when b.Page = 'Products' then b.NbVisitors else 0 end)
from @T a, @T b
where a.ID <= 3
group by
a.ID
, case a.ID
when 1 then b.VisitDate
when 2 then
dateadd(ww, datepart(ww, b.VisitDate), datepart(yy, b.VisitDate))
when 3 then datepart(yy, b.VisitDate)
end
order by "PERIOD_ID"