voilà mon petit soucis actuel
je fais une requete comme celle-ci
SELECT rx.tyre_id, rx.tyre_nom, rx.tyre_abr, rx.tyre_couleur_rvb
, COUNT(*) AS nb_regle
, SUM(rx.ActifToday) AS nb_actif_today, SUM(rx.ActifPast) AS nb_actif_past, SUM(rx.ActifFutur) AS nb_actif_futur
, Min(rx.taux) as valeur_taux_min, MAX(rx.taux) as valeur_taux_max
, Min(rx.fixe) as valeur_fixe_min, MAX(rx.fixe) as valeur_fixe_max
, rx.valeur_type
, rx.devi_abr
, j.jour_index AS num_semaine -- index des périodes de dates demandés(les colonnes du DashboardRegle)
, MIN(rsa.enti_id) as sur_enti_id -- on veut savoir si le groupe de règles est paramétré sur au moins un partenaire (donc min suffit)
, p.item_id AS item_id -- entêtes des lignes du DashboardRegle
FROM regl rx
INNER JOIN dbo.regle_s_applique rsa ON rx.regl_id = rsa.regl_id
INNER JOIN @periods j ON j.jour_d_fin > rx.regl_d_debut_obligatoire AND j.jour_d_debut < rx.regl_d_fin_obligatoire -- regroupement des règles pour les périodes de dates demandés(les colonnes du DashboardRegle)
LEFT JOIN @tmpIds p ON rsa.prest_id = p.prest_id -- pas en INNER JOIN pour aussi avoir les règles paramétrés sur partenaire
WHERE rx.regl_d_fin_obligatoire > @debut AND rx.regl_d_debut_obligatoire < @fin -- limite sur les dates de la règle
AND (rx.regl_actif = 1 OR @nonActive = 1) -- limite aux règles active, sauf si précisé qu'on les veut toutes
AND (rx.tyre_id IN (SELECT id FROM @tyreIds) OR NOT EXISTS (SELECT 1 FROM @tyreIds)) -- filtre les types de règles si renseigné
--AND (rsa.enti_id IN (SELECT id FROM @entiIds) OR NOT EXISTS (SELECT 1 FROM @entiIds))-- OR rsa.enti_id IS NULL) -- filtre les partenaires s'ils sont renseignés et demandés (09/05/17 EH filtre fort pour n'avoir que les partenaires demandés)
AND (rsa.enti_id IN (SELECT id FROM @entiIds) OR NOT EXISTS (SELECT 1 FROM @entiIds) OR (@EntiNULL = 1 AND rsa.enti_id IS NULL)) -- 11/05/2017 EH filtre les partenaires
AND (rsa.prest_id = p.prest_id OR rsa.prest_id IS NULL) -- les règles paramétrés sur les prestations voulues, soit les règles paramétrés sur partenaire
AND (rsa.typp_id_du_produit IS NULL OR rsa.typp_id_du_produit IN (SELECT typp_id FROM @tmpIds))
GROUP BY rx.tyre_id, rx.tyre_nom, rx.tyre_abr, rx.tyre_couleur_rvb
, rx.devi_abr
, rx.valeur_type
, p.item_id
, j.jour_index
ORDER BY j.jour_index, rx.tyre_id, rx.devi_abr, item_id, nb_regle, valeur_taux_min, valeur_fixe_min, valeur_taux_max, valeur_fixe_max -- ORDER BY pour afficher les règles toujours dans le même sens
et je dois l'améliorer avec un if dans le where
j'ai essayer ça
AND rsa.camt_id = (CASE WHEN @CamtId > 0 THEN @CamtId END)
mais le faite est que quand mon @CamtId <0 je voudrais qu'il ne me fasse pas le and je sais pas trop comment faire si vous avez des idées
24 juil. 2018 à 09:15
1- ça me fais une erreur sur le "=" (syntaxe incorrecte)
2 - du coup j'ai essayé en mettant mais pas mieux en faite ca me retourne rien ^^
24 juil. 2018 à 09:23
24 juil. 2018 à 09:32
24 juil. 2018 à 10:02
et qui fonctionne !!! :)