Jag har ett smalldatetime-fält logLogindate som anger inloggningstiden för en besökare. Jag vill visa den procentuella fördelningen av inloggningar per timme. Tex:
00 12%
01 17%
.
.
22 24%
23 14%
Om jag skriver så här:
SELECT DATEPART(hour, logLogindate), COUNT(*)
FROM dbo.login
GROUP BY DATEPART(hour, logLogindate) WITH rollup
får jag fram antal inloggningar per timme. Men jag skulle vilja att de timmar då ingen har loggat in får värdet 0. Som det är nu finns ju inte de posterna.
select h,count(logLogindate) from
(select 0 as h union select 1 union select 2
select 3 union select 4 union select 5
select 6 union select 7 union select 8
select 9 union select 10 union select 11
select 12 union select 13 union select 14
select 15 union select 16 union select 17
select 18 union select 19 union select 20
select 21 union select 22 union select 23) as hours left join
dbo.login on hours.h = DATEPART(hour, logLogindate)
GROUP BY h WITH rollup
Alternativt så kan du skapa en tabell och lägga in 24 poster med värdet 0 till 23 och joina mot den istället.
------------------ essentitia preter non sans multiplicandum
select h,count(logLogindate) from
(select 0 as h union select 1 union select 2 union
select 3 union select 4 union select 5 union
select 6 union select 7 union select 8 union
select 9 union select 10 union select 11 union
select 12 union select 13 union select 14 union
select 15 union select 16 union select 17 union
select 18 union select 19 union select 20 union
select 21 union select 22 union select 23) as hours left join
dbo.login on hours.h = DATEPART(hour, logLogindate)
GROUP BY h WITH rollup
Jo, jag såg att du har SQL server, annars hade jag inte skrivit så där då det inte är portabelt.
------------------ essentitia preter non sans multiplicandum