IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Condition WHERE IN qui passe de 2 à 3 choix [2017]


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé

    Profil pro
    Consultant Business Intelligence
    Inscrit en
    Novembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant Business Intelligence

    Informations forums :
    Inscription : Novembre 2005
    Messages : 285
    Par défaut Condition WHERE IN qui passe de 2 à 3 choix
    Bonjour,

    J'ai une clause WHERE qui filtrait sur un Id. dans ces Idi on veut soit ceux qui ont la valeur 4, ou alors ceux qui ont la valeur 3 et 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DECLARE  @Choix AS INT = 3 -- soit 3 ou 4 on veut soit les éléments avec Id= ou tous les éléments Id=3 et Id=4
     
    .....WHERE Id IN (@Choix, 4)
    Donc si on veux que les Id=4, @choix=4 -> 4 IN (4,4) On récupère que les Id=4.
    sinon @choix=3 -> 3 ou 4 IN (3 , 4) et on récupère les Id= 3 et Id=4.

    Ma demande est comment modifier la clause Where si on demande une 3ème option.
    La demande est parfois on veut seulement les Id = 1.

    Je vois pas comment modifier rapidement pour ajouter ce choix.


    Merci d'avance

  2. #2
    Membre chevronné Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 547
    Par défaut
    Utilisez une variable table et modifiez les données qui sont mises dedans suivant le besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE @bb TABLE ( nombre int NOT NULL )
    INSERT INTO @bb ( nombre ) VALUES ( 1 ) ; INSERT INTO @bb ( nombre ) VALUES ( 3 ) ; INSERT INTO @bb ( nombre ) VALUES ( 4 )
     
    SELECT MT.*
    FROM dbo.Matable as MT
    INNER JOIN @bb as BB
    	ON MT.id = BB.nombre
    Code écrit vite fait pour l'exemple et non testé

  3. #3
    Membre éclairé

    Profil pro
    Consultant Business Intelligence
    Inscrit en
    Novembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant Business Intelligence

    Informations forums :
    Inscription : Novembre 2005
    Messages : 285
    Par défaut
    Bonjour,

    Merci beaucoup de la réactivité. mais les premières demandes restent.
    Donc on prend les Id :
    - 3 et 4.
    - 4 seulement
    - 1 seulement.


    Avec la variable de table. Je gère comment le cas 1 ou je veux les id 3 et 4 ?

  4. #4
    Membre chevronné Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 547
    Par défaut
    Citation Envoyé par t-die Voir le message
    Avec la variable de table. Je gère comment le cas 1 ou je veux les id 3 et 4 ?
    Tu gères le contenu de la table temporaire comme une table normale et tu adapte les insert en conséquence suivant le cas

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 992
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE  @Choix AS VARCHAR(1000) = '3, 4, 7, 11'
     
     
    .....WHERE MaColonne IN (SELECT CAST(value AS INT)
                             FROM   STRING_SPLIT(@Choix, ','))
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    declare @choix AS INT=3;
     
    select t1.Id, Val
      from (values(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D')) as t1 (Id, Val) -- Ici votre vraie table
      join (values(1, 1), (3, 3), (3, 4), (4, 4))      as t2 (Choix, Id) on t2.Id = t1.Id
     where t2.Choix = @choix;

  7. #7
    Membre éclairé

    Profil pro
    Consultant Business Intelligence
    Inscrit en
    Novembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant Business Intelligence

    Informations forums :
    Inscription : Novembre 2005
    Messages : 285
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE  @Choix AS VARCHAR(1000) = '3, 4, 7, 11'D
     
     
    .....WHERE MaColonne IN (SELECT CAST(value AS INT)
                             FROM   STRING_SPLIT(@Choix, ','))
    A +
    Super merci de base j'utilise cette méthode pour un choix de district en fonction de leur Id.

    Ce qui m'a perturbé, c'est que la SP est utilisé pour un dataset dans un Rapport sous ReportingServices et je peux pas utilisé une liste à choix multiple mais une liste déroulante à choix unique.
    Mais en fait j'ai qu'a faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If @choix= 1 THEN
    @Choix2 = '1'
    If @choix= 3 THEN
    @Choix2 = '3,4'
    If @choix= 3 THEN
    @Choix2 = '4'
    Avec le SET variable bien sûr

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.4] sql condition WHERE ne passe pas
    Par laurentbatch dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2013, 19h11
  2. [AC-2007] Condition WHERE en SQL qui me retourne une liste vide
    Par Rodrigue dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/11/2010, 15h28
  3. [MySQL] Condition where qui me pose problème
    Par Ikaly dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/05/2010, 10h09
  4. Condition OU qui passe comme un ET
    Par kykyn dans le forum Langage
    Réponses: 10
    Dernier message: 17/08/2008, 17h58
  5. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo