2016-02-29 1 views
0
ID | Equipment | HireDate | HireTodate | ActualOffhireDate 
--------------------------------------------------------------------- 
01 | Printer  | 01/01/2013 | 31/12/2016 | 
02 | Printer  | 01/05/2015 | 31/12/2016 | 
03 | Laptop  | 17/01/2016 | 31/12/2016 | 
04 | Laptop  | 01/01/2015 | 31/12/2016 | 28/01/2016 

J'ai comme le tableau ci-dessus et que vous souhaitez obtenir le nombre en fonction de la semaine (du vendredi au jeudi) pour le mois de janvier 2016 par le dessousSQL TSQL requête pour obtenir le nombre d'équipements sur une base hebdomadaire

Equipment | January count | Week 1| Week 2| Week 3| Week 4 
------------------------------------------------------------------ 
Printer | 02   | 02 | 02 | 02 | 02 
Laptop | 02   | 01 | 01 | 02 | 01 
+0

Du samedi au vendredi, ou du vendredi au jeudi peut-être? – jarlh

+0

Je suis incapable d'obtenir le nombre de l'hebdomadaire en utilisant la condition entre – Eddie

+2

Quel SQL avez-vous essayé? –

Répondre

0

Vous avez besoin d'une table de calendrier qui aide à traiter ce type de requête très rapidement et avec un minimum d'effort.

Voici une façon dont je l'ai utilisé pour générer calendar table..and il ressemble à ci-dessous dans mon environnement ...

enter image description here

Une fois que vous avez la table de calendrier, tout ce que vous devez faire est de rejoindre la date que vous voulez compter qui est aussi simple que ci-dessous

select 
equipment, 
count(*) as 'Jancount', 
sum(case when wkno =1 then 1 else 0 end) 'Week 1', 
sum(case when wkno =2 then 1 else 0 end) 'Week 2', 
sum(case when wkno =3 then 1 else 0 end) 'Week 3', 
sum(case when wkno =4 then 1 else 0 end) 'Week 4' 
from 
calendar c 
join testtable p 
on p.hiretodate=c.date 
group by equipment 

sortie:
enter image description here