Requete IF dans un where

Résolu/Fermé
Juduno - 23 juil. 2018 à 17:22
 Juduno - 24 juil. 2018 à 10:02
Bonjour ,

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

merci d'avance

1 réponse

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
23 juil. 2018 à 17:41
Bonjour,

Sans en être sûr...

AND (CASE WHEN @CamtId > 0 THEN rsa.camt_id = @CamtId  END)

0
salut merci de ta réponse je viens d'essayer mais
1- ça me fais une erreur sur le "=" (syntaxe incorrecte)
2 - du coup j'ai essayé en mettant
ELSE NULL
mais pas mieux en faite ca me retourne rien ^^
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
24 juil. 2018 à 09:23
a la place du else null tu peux essayer un else 1
0
pas mieux je vais continuer a rechercher merci quand même
0
trouver en regardant sur plusieurs site et mixant les infos j'en ai ressortie
  AND (ISNULL(@CamtId, 0) = 0 OR rsa.camt_id = @CamtId)

et qui fonctionne !!! :)
0