0
votes

Compter les enregistrements par mois avec condition

J'ai une table, appelons-les samaydata xxx

J'ai besoin de Sélectionner (département, mois, années, compte (Letecome)) < / Code> et Nombre Les enregistrements Compte (où Letecome> '00: 00: 01 ')> 2 par mois.

Parce que, Aria & Brian a Latecome> 2 par mois, Belle et Ziya seulement 1 Latecome et Chloe seulement 2 Latecome par mois. Donc, dans le département BB Juste 1 c'est Aria, et le département CC est 0, car Chloe & Ziya <= 2 Lateecome .

Et c'est la sortie de l'échantillon que je veux dire: xxx


0 commentaires

3 Réponses :


2
votes
;With sdCTE as
(
 SELECT NAME, DEPARTMENT, MONTH(StatusIn) as [Month] , YEAR(StatusIn) as [Year],  
 Case when LateCome > '00:00:00' then 1 Else 0 End as LateCome 
 from #SUMMARYDATA
)
Select DEPARTMENT, [Month],[Year], 
    Case when Max(LateCount) > 2 then 1 Else 0 End as LateCome  
from
(
    select Name, DEPARTMENT, [Month],[Year], Sum(LateCome) LateCount  
    from sdCTE
    group by Name,DEPARTMENT, [Month],[Year]
) Q
Group by DEPARTMENT, [Month],[Year]

3 commentaires

Merci beaucoup de m'aider :) C'est le travail .. mais quand je cours avec mes données réelles .. J'ai 2 personnes dans le département BB qui ont Latecome > 2. Pourquoi la sortie ne montre que 1 pas 2?


S'il vous plaît vérifier ma question mise à jour pour voir les échantillons de données et la sortie .. merci :)


Que j'ai fait, avec l'hypothèse, vous avez besoin de 1 ou de 0 si la condition de présence tardive est remplie. S'il vous plaît vérifier ma nouvelle solution.



2
votes

Essayez ce qui suit:

;WITH cte AS 
(
    SELECT DISTINCT [NAME], DEPARTMENT, MONTH(STATUSIN) [MONTH], YEAR(STATUSIN) [YEAR], 
        SUM(CASE WHEN LATECOME = '00:00:00' THEN 0 ELSE 1 END) OVER(PARTITION BY [NAME], DEPARTMENT, MONTH(STATUSIN), YEAR(STATUSIN) ORDER BY [NAME]) Total
    FROM SUMMARYDATA
)

SELECT DEPARTMENT, [MONTH], [YEAR], SUM(CASE WHEN TOTAL > 2 THEN 1 ELSE 0 END) LATECOME
FROM cte
GROUP BY DEPARTMENT, [MONTH], [YEAR] 


5 commentaires

La voie de Sacse est bien meilleure que la mienne :) - je suis vieille école :(


@Srinika Chaque réponse avec la sortie correcte est gr8 \ m / :).


le tien est plus concis


merci beaucoup de m'aider :) C'est du travail .. Mais quand je cours avec mes données réelles .. j'ai 2 personnes dans le département BB qui ont Latecome> 2 .. Pourquoi la sortie ne montre que 1 pas 2? @sace


S'il vous plaît vérifier ma question mise à jour pour voir les échantillons de données et la sortie .. merci :) @sace



1
votes

Ceci est pour les exigences modifiées

;With sdCTE as
(
 SELECT NAME, DEPARTMENT, MONTH(StatusIn) as [Month] , YEAR(StatusIn) as [Year],  
 Case when LateCome > '00:00:00' then 1 Else 0 End as LateCome 
 from #SUMMARYDATA
)

Select DEPARTMENT, [Month],[Year], 
    Sum(Case when (LateCount) > 2 then 1 Else 0 End) as LateCome  
from
(
    select Name, DEPARTMENT, [Month],[Year], Sum(LateCome) LateCount  
    from sdCTE
    group by Name,DEPARTMENT, [Month],[Year]
) Q
Group by DEPARTMENT, [Month],[Year]


0 commentaires