2009-10-13 7 views
0

Utilisation de SQL Server 2005Comment compter le nombre de jours?

Tableau 1

ID FromDate ToDate 

001 23-02-2009 25-02-2009 
001 27-02-2009 29-02-2009 
002 12-02-2009, 25-03-2009 

...,

Tableau2

ID Name Total 

001 Raja 30 
002 Ravi 22 

Je veux obtenir jour total pour l'personid

Essayé requête,

SELECT 
    table2.Id, table2.name, table2.total, 
    datediff(day, table1.fromdate, table2.todate) 
FROM table1 
LEFT OUTER JOIN table2 ON table1.personid = table2.personid 

Obtention d'une sortie

ID Name Total Days 

001 Raja 30 3 
001 Raja 30 3 
..., 

Il devrait totaliser les jours et il devrait afficher dans une ligne,

Note: Supposons que je choisissais la date de période donnée signifie qu'il doit afficher que les jours ne

Par exemple

où date entre 26-02-2009 au 03-03-2009, il devrait afficher

ID Name Total Days 

001 Raja 30 3 
..., 

Parce que je prends date après 25-02-2009,

Expected Output 

ID Name Total Days 

001 Raja 30 6 
002 Ravi 22 16 

Comment modifier ma requête?

+2

Par ailleurs, dans les données que vous avez utilisées pour vider table1 , 29-02-2009 n'est pas une date valide. 2009 n'a pas été une année bissextile et SQL Server va crier haut et fort. –

Répondre

0

DATEDIFF donne le nombre de jours de différence entre les deux dates, donc de la même manière la différence entre 1 et 3 est 2 (3 - 1 = 2), DATEDIFF (d) est effectivement D2 - D1. Donc, pour compenser le jour supplémentaire que vous voulez compter, vous devez DATEADD un jour ou l'autre (ou ToDate FromDate) pour compenser vos dates:

SELECT table2.id, table2.Name, table2.Total, SUM(DATEDIFF(d, DATEADD(d, -1, table1.FromDate), table1.ToDate)) 
    FROM table1 
     INNER JOIN table2 ON table1.id = table2.id 
    GROUP BY table2.id, table2.Name, table2.Total 
0
SELECT table2.Id, table2.name, table2.total, 
     COALESCE(
     (
     SELECT SUM(DATEDIFF(day, table1.fromdate, table1.todate) + 1) 
     FROM table1 
     WHERE table1.personid = table2.personid 
     ), 0) AS [days] 
FROM table2 
+0

Non, je suis en train d'utiliser DATEDIFF (jour, table1.fromdate, table1.todate), donc supposons dedate = 24-02-2009 et todate = 28-02-2009 signifie qu'il devrait donner un total de 5 jours, mais maintenant il donne 3 jours seulement. C'est éviter 24 et 28. Comment obtenir ce compte aussi. – Gopal

+0

Voir la mise à jour de poste. Si vos dates sont '24-02-2009' et' 28-02-2009', le 'DATEDIFF' vous donnera' 4' jours, pas '3'. – Quassnoi

0

Je pense GROUP BY requête serait plus simple:

SELECT table2.Id, table2.name, table2.total, 
SUM(DATEDIFF(day, table1.fromdate, table1.todate)) AS Days 
FROM table1 
left outer join table2 on 
table1.personid = table2.personid 
GROUP BY table2.Id, table2.name, table2.total 
+0

Non, je suis en train d'utiliser DATEDIFF (day, table1.fromdate, table1.todate), donc supposons fromdate = 24-02-2009 et todate = 28-02-2009 signifie qu'il devrait donner un total de 5 jours, mais maintenant il donne 3 jours seulement. C'est éviter 24 et 28. Comment obtenir ce compte aussi. – Gopal

Questions connexes