17. februar 2005 - 14:35Der er
7 kommentarer og 1 løsning
Gruppering på ugedage
Tabel: UnitID int autoincrement CreateDate date CreatorID int
Ønsket resultatsæt:
BrugerID Mandag Tirsdag Onsdag Torsdag Fredag Weekend Total
Dvs. én række pr. CreatorID, med antallet af Units lavet på de enkelte ugedage + weekend (lørdag+søndag), og en total.
Denne kan måske hjælpe lidt, den giver bare resultatet på flere rækker SELECT COUNT( * ), DATEPART(DW,CreateDate), CreatorID FROM Tabel GROUP BY DATEPART(DW,CreateDate), CreatorID
SELECT CreatorID, (SELECT COUNT(*) FROM Tabel WHERE CreatorID = t1.CreatorID AND DATEPART(dw, CreateDate) = 1) AS Mandag, (SELECT COUNT(*) FROM Tabel WHERE CreatorID = t1.CreatorID AND DATEPART(dw, CreateDate) = 2) AS Tirsdag, (SELECT COUNT(*) FROM Tabel WHERE CreatorID = t1.CreatorID AND DATEPART(dw, CreateDate) = 3) AS Onsdag, (SELECT COUNT(*) FROM Tabel WHERE CreatorID = t1.CreatorID AND DATEPART(dw, CreateDate) = 4) AS Torsdag, (SELECT COUNT(*) FROM Tabel WHERE CreatorID = t1.CreatorID AND DATEPART(dw, CreateDate) = 5) AS Fredag, (SELECT COUNT(*) FROM Tabel WHERE CreatorID = t1.CreatorID AND DATEPART(dw, CreateDate) IN (6, 7)) AS Weekend FROM Tabel t1 GROUP BY CreatorID
Select CreatorID, Sum(Man) as Mandag, Sum(Tir) as Tirsdag,............ FROM( SELECT CreatorID, CASE DATEPART(dw, CreateDate) = 1 THEN 1 ELSE 0 END as Man CASE DATEPART(dw, CreateDate) = 2 THEN 1 ELSE 0 END as Tir CASE DATEPART(dw, CreateDate) = 3 THEN 1 ELSE 0 END as Ons CASE DATEPART(dw, CreateDate) = 4 THEN 1 ELSE 0 END as Tor CASE DATEPART(dw, CreateDate) = 5 THEN 1 ELSE 0 END as Fre CASE DATEPART(dw, CreateDate) > 5 THEN 1 ELSE 0 END as Week From Tabel ) as T GROUP BY CreatorID
Jeg er først lige blevet opmærksom på mulighederne med CASE, og dette er en af de smartere anvendelser jeg har set. Mon ikke den også er mindre tung?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.