Recherche d'une seule requête à utiliser éventuellement dans un rapport SQL Server 2005. J'ai besoin de:SQL Server 2005 - requête avec l'instruction case
- Tirez dans tous les enregistrements distincts pour les valeurs dans la colonne "eventid" pour un laps de temps - cela semble fonctionner.
- Pour chaque eventid référencé ci-dessus, j'ai besoin de rechercher toutes les instances du même eventid pour voir s'il existe un autre enregistrement avec TaskName comme 'review1%'. Encore une fois, cela semble fonctionner.
- C'est là que les choses se compliquent: Pour chaque enregistrement où TaskName est comme review1, j'ai besoin de voir si un autre enregistrement existe avec le même eventid et où TaskName = 'End'. En fin de compte, j'ai besoin de compter combien d'enregistrements ont TaskName comme 'review1%', et puis combien ont TaskName comme 'review1%' AND TaskName = 'End'. Je pense que cela pourrait être accompli en définissant une nouvelle valeur pour chaque enregistrement, et pour l'eventid, si un enregistrement existe avec TaskName = 'End', mettre à 1, et sinon, mettre à 0.
la requête semble ci-dessous pour atteindre le point 1 ci-dessus:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000'))) AS T
WHERE seq = 1 order by eventid
Et la requête semble ci-dessous pour accomplir # 2:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000')) and TaskName like 'Review1%') AS T
WHERE seq = 1 order by eventid
Cela ramènera les années eventid qui ont également TaskName = « End » :
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000')) and TaskName like 'Review1%') AS T
WHERE seq = 1
and eventid in
(Select eventid from
eventrecords
where TaskName = 'End')
order by eventid
J'ai essayé ce qui suit pour essayer d'accomplir # 3:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000')) and TaskName like 'Review1%') AS T
WHERE seq = 1
and
case
when (eventid in
(Select eventid from
eventrecords
where TaskName = 'End') then 1
else 0) as bit
end
order by eventid
Lorsque je tente de lancer, je reçois: « syntaxe incorrecte près du mot-clé « puis ». » Je ne sais pas ce que je fais mal. Je n'ai pas vu d'exemple nulle part comme ça.
Je dois mentionner que eventrecords a une clé primaire, mais cela ne semble pas aider quand je l'inclue, et je ne suis pas autorisé à changer la table. (ugh) J'ai reçu une suggestion pour utiliser un curseur et une table temporaire, mais je ne suis pas sûr de savoir comment cela pourrait ralentir les performances lorsque le rapport est en cours d'exécution. Merci d'avance.
Mark, j'essaie de vérifier si un nom de tâche avec le même attribut existe, et je veux qu'il affiche un oui/non , vrai/faux type de valeur. Si je laisse la requête comme vous l'avez, elle ramènera simplement tous les eventid qui ont un enregistrement avec TaskName comme 'Review1%' et un autre enregistrement avec TaskName = 'End'. Je devrai obtenir les valeurs totales des enregistrements avec 'End' et ceux sans End dans mon rapport. – user329266
@ user329266: Je voudrais aider plus mais votre question est plutôt difficile à suivre.Je peux vous aider davantage si vous publiez a) toutes vos définitions de tables b) quelques instructions SQL qui insèrent des données de test dans ces tables, par ex. 10 lignes pour chaque tableau c) la sortie requise de la requête lors de l'exécution sur les données de test –