L'utilisateur clique sur un mois, puis cette procédure stockée est exécutée. Il vérifie le temps total réservé et les groupes filtrés.Filtre basé sur plusieurs plages de dates?
| Job Group | Month Booked | Time (hrs) |
Cleaning Jan 7
J'ai l'instruction SQL suivante:
SELECT
tsks.grouping_ref, ttg.description AS grouping_desc,
SUM(ts.booked_time) AS booked_time_total,
DATENAME(MONTH, ts.start_dtm) + ' ' + DATENAME(YEAR, ts.start_dtm) AS month_name,
@month_ref AS month_ref
FROM
timesheets ts
JOIN
timesheet_categories cat ON ts.timesheet_cat_ref = cat.timesheet_cat_ref
JOIN
timesheet_tasks tsks ON ts.task_ref = tsks.task_ref
JOIN
timesheet_task_groupings ttg ON tsks.grouping_ref = ttg.grouping_ref
WHERE
ts.status IN(1, 2) --Booked and approved
AND cat.is_leave_category = 0 --Ignore leave
AND DATEPART(YEAR, ts.start_dtm) = @Year
AND DATEPART(MONTH, ts.start_dtm) = @Month
GROUP BY
tsks.grouping_ref, ttg.description,
DATENAME(MONTH, ts.start_dtm),
DATENAME(YEAR, ts.start_dtm)
ORDER BY
grouping_desc
Je veux filtrer en fonction des plages de dates multiples.
Je pensais à ajouter ceci:
AND ((ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
OR (ts.start_dtm BETWEEN '2012-01-02' AND '2012-01-29'))
Mais alors réalisé que ce ne serait pas question ce mois, l'utilisateur a cliqué, il montrerait encore tous les registres qu'il procédera à la déclaration OU.
Ce que je besoin est quelque chose qui est basé sur le month_ref, par exemple:
CASE WHEN @month_ref = 81201 THEN
AND (ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
END
Mais la déclaration de cas doit aller juste après la clause WHERE.
J'ai environ 12 mois comptables pour 2012 que j'ai besoin d'ajouter comme instructions de cas, de sorte que lorsque l'utilisateur cliquera sur Mars, il lancera le bon filtre.
Dans la base de données ts.start_dtm
ressemble à ceci:
2011-04-01 00:00:00.000
espoir qui était assez d'information pour mon premier poste?
Je suis coincé en train d'écrire la déclaration de cas et où, pour le dire, j'ai essayé pendant des heures maintenant.
Espoir vous pouvez aider :)
Merci pour cela, donc l'extrait de code crée la table temporaire dans mon DB ? –
L'exemple utilise une table temporaire pour stocker les dates d'exécution de la requête par rapport à yes. Vous devrez créer une table permanente d'entiers pour que l'instruction insert fonctionne (en supposant que vous n'en ayez pas déjà un) – u07ch
Ma procédure stockée semble fonctionner dans le studio de gestion mais le site ne semble pas aimer DATE ENTRE. Des idées pourquoi? –