Je souhaite créer une fonction de classement pour compter le nombre de fois qu'une personne a visité la propriété BY DATE mais à condition de ne pas inclure de catégorie de visite. 'Appels'
1046 Red Property 30/10/2019 Field 2 10467 Red Property 29/10/2019 Field 1 10591 Red Property 28/10/2019 Calls 10971 Blue Property 27/10/2019 Field 2 10971 Blue Property 26/10/2019 Field 1 10971 Blue Property 26/10/2019 calls 10965 Green Property 24/10/2019 calls 10765 Green Property 23/10/2019 calls 10765 Green Property 19/10/2019 field 3 10765 Green Property 15/10/2019 field 2 10765 Green Property 12/10/2019 field 1
Faire ceci classe l'ensemble de la table de communication dont je ne veux pas.
---- ActivityID ---------- Propriété -------- DATE --- --- CommunicationType ---------------- Rang
DENSE_RANK() over(partition by activitytable.[Property] ORDER BY activitytable.[Date] as Job rank
Idéalement, je veux que le tableau apparaisse comme ci-dessus pour ignorer les éléments des appels de la colonne type de communication et ne comptez que la catégorie des champs. Comment pourrais-je faire cela?
3 Réponses :
Essayez simplement:
CASE WHEN CommunicationType <> 'CAlls' THEN DENSE_RANK() over(partition by activitytable.[Property] ORDER BY activitytable.[Date] ELSE NULL END AS Job rank
Je pense que vous devez également partitionner par CommunicationType .
@Alex Fondamentalement, je copie simplement la clause OP - le point clé ici est d'utiliser CASE WHEN ou IIF pour exclure certaines des lignes du classement - la clause de classement peut être comme il aime.
Je pense que vous n'excluez pas les lignes du classement de cette façon, vous ne masquez que la valeur dans Select, c'est-à-dire que la valeur est comptée dans le classement, mais pas affichée. Identique à CASE ... SUM est différent de SUM (CASE ... .
Merci pour votre réponse, fonctionne presque mais cela ne complète pas ignore les valeurs nulles et les saute simplement comme. 1,2,3 nul, 5 etc.
Vous n'avez pas de dates en double, alors utilisez simplement une somme cumulative:
select (case when communicationtype = 'Visits'
then dense_rank() over (partition by activitytable.[Property], communicationtype
order by activitytable.[Date]
)
end) as job_rank
Vous avez probablement aussi une colonne qui représente la "personne", si vous voulez ce classement par personne.
/ p>
Si vous avez besoin de dense_rank () parce qu'il y a des doublons, alors la réponse est plus difficile. Ce qui suit doit faire ce que vous voulez:
sum(case when communicationtype <> 'Calls'
then 1 else 0
end) over (partition by activitytable.[Property] order by activitytable.[Date]
) as Job_rank
Remarque: la valeur n'apparaîtra pas sur les lignes avec Appels . On ne sait pas si cela est nécessaire.
Merci, cela semble fonctionner. L'essentiel ici est d'ajouter le type de communication à la partition avec l'instruction case when. Acclamations
Vous devez partitionner par Propriété et CommunicationType:
Table:
ActivityID Property DATE CommunicationType Rank 10971 Blue Property 2019-10-26 calls NULL 10971 Blue Property 2019-10-26 field 1 10971 Blue Property 2019-10-27 field 2 10765 Green Property 2019-10-23 calls NULL 10965 Green Property 2019-10-24 calls NULL 10765 Green Property 2019-10-12 field 1 10765 Green Property 2019-10-15 field 2 10765 Green Property 2019-10-19 field 3 10591 Red Property 2019-10-28 calls NULL 10467 Red Property 2019-10-29 field 1 1046 Red Property 2019-10-30 field 2
Déclaration: p>
SELECT
*,
CASE
WHEN CommunicationType = 'field' THEN DENSE_RANK() OVER (PARTITION BY Property, CommunicationType ORDER BY [DATE] ASC)
ELSE NULL
END AS Rank
FROM #Data
Résultat:
CREATE TABLE #Data (
ActivityID int,
Property varchar(100),
[DATE] date,
CommunicationType varchar(10)
)
INSERT INTO #Data
(ActivityID, Property, [DATE], CommunicationType)
VALUES
(1046, 'Red Property', '20191030', 'field'),
(10467, 'Red Property', '20191029', 'field'),
(10591, 'Red Property', '20191028', 'calls'),
(10971, 'Blue Property', '20191027', 'field'),
(10971, 'Blue Property', '20191026', 'field'),
(10971, 'Blue Property', '20191026', 'calls'),
(10965, 'Green Property', '20191024', 'calls'),
(10765, 'Green Property', '20191023', 'calls'),
(10765, 'Green Property', '20191019', 'field'),
(10765, 'Green Property', '20191015', 'field'),
(10765, 'Green Property', '20191012', 'field')
@ shevchenko2020 J'espère que cela aide. Si vous pensez que telle ou telle réponse est la meilleure solution à votre problème, vous pouvez l'accepter (une seule réponse peut être acceptée). Merci.
Veuillez montrer les résultats que vous souhaitez.