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

Langage SQL Discussion :

CASE WHEN donne un résultat différent de LIKE


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Data
    Inscrit en
    Mai 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Data

    Informations forums :
    Inscription : Mai 2023
    Messages : 14
    Points : 11
    Points
    11
    Par défaut CASE WHEN donne un résultat différent de LIKE
    Bonjour à tous !

    J'ai un problème et je ne comprends pas son origine. Je m'entraîne sur une base de données contenant des infos sur différents établissement.
    Je dois compter le nombre d'établissement par ville, sachant que les villes n'ont pas été normalisées. Problème, je n'arrive pas à regrouper toutes ces formes spécifiques sous un nom de ville normalisée. En effet, en faisait un LIKE, je trouev des chiffres supérieur à mon CASE WHEN. Sauriez-vous d'où peut venir le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ESTABLISHMENT_CITY, count(ESTABLISHMENT_CITY) FROM DIM_ESTABLISHMENT
    WHERE LOWER(ESTABLISHMENT_CITY) LIKE '%koln%' OR LOWER(ESTABLISHMENT_CITY) LIKE '%cologne%' OR LOWER(ESTABLISHMENT_CITY) LIKE '%koeln%'
    GROUP BY ESTABLISHMENT_CITY
    Donne 31 établissements alors que :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CASE WHEN LOWER(estab.ESTABLISHMENT_CITY) IN ('münchen', 'munchen', 'munich') THEN 'munich'
            WHEN LOWER(estab.ESTABLISHMENT_CITY) IN ('cologne', 'köln','koln','koeln') THEN 'cologne'
            ELSE LOWER(estab.ESTABLISHMENT_CITY)                                                    END AS ESTABLISHMENT_CITY_AGG,
    COUNT(DISTINCT estab.ESTABLISHMENT_CODE) AS Nb_hotels
    FROM DIM_ESTABLISHMENT AS estab
    WHERE LOWER(estab.ESTABLISHMENT_CITY) IN ('adelaide', 'amsterdam', 'atlanta', 'auckland', 'austin', 'barcelona', 'berlin', 'birmingham', 'bordeaux', 'boston', 'brisbane', 'bristol', 'brussels', 'canberra', 'chicago', 'cologne', 'dallas', 'dubai', 'dublin', 'edinburgh', 'florence', 'frankfurt', 'geneva', 'glasgow', 'gold coast', 'hamburg', 'hobart', 'lille', 'lisbon', 'liverpool', 'london', 'los angeles', 'lyon', 'madrid', 'manchester', 'marseille', 'melbourne', 'mexico city', 'miami', 'milan', 'montreal', 'munich', 'naples', 'nantes', 'new york', 'nice', 'paris', 'perth', 'porto', 'prague', 'quebec', 'rio de janeiro', 'rome', 'san francisco', 'sao paulo', 'seattle', 'seville', 'singapore', 'stuttgart', 'sydney', 'toronto', 'toulouse', 'valencia', 'vancouver', 'vienna', 'warsaw', 'washington', 'zurich')
    GROUP BY CASE 
            WHEN LOWER(estab.ESTABLISHMENT_CITY) IN ('münchen', 'munchen', 'munich') THEN 'munich'
            WHEN LOWER(estab.ESTABLISHMENT_CITY) IN ('cologne', 'köln','koln','koeln') THEN 'cologne'
            ELSE LOWER(estab.ESTABLISHMENT_CITY)  END
    ORDER BY Nb_hotels  DESC;
    Donne 1 seul établissement pour cologne, que je soupçonne de correspondre aux résultats correspondant à 'cologne'

    je n'ai vraiment pas de piste :/

    Merci d'avance et bonne journée !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Bonjour,
    Dans la seconde requête, tu as bien "cologne" dans la liste des valeurs cherchées (dans la clause WHERE), mais ni "koln", ni "koeln", ni "köln".
    Bref tu ne filtres pas sur les même valeurs pour cette ville.
    Donc j'ai envie de dire que le CASE ne sert à rien ici (pour Cologne).

    Tatayo.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Data
    Inscrit en
    Mai 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Data

    Informations forums :
    Inscription : Mai 2023
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Ah ok il faut que j'ajoute toutes les possibilités au where en fait ! si je ne me trompe pas

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 219
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 219
    Points : 8 450
    Points
    8 450
    Billets dans le blog
    17
    Par défaut
    À ta place je ferais une table d'alias pour éviter les multiples CASE. Tu peux la créer un dur, ou avec une CTE.

    Par ailleurs tu ne devrais pas avoir à tester la casse et l'accentuation.

    Teste si la COLLATION est bonne :

    SELECT ALL COLLATION('Munchen'), 'Munchen' = 'münchen';

Discussions similaires

  1. Une même variable donne des résultats différents
    Par profilien dans le forum Langage
    Réponses: 5
    Dernier message: 23/04/2013, 09h14
  2. La même formule donne des résultats différents
    Par shadelv dans le forum Excel
    Réponses: 3
    Dernier message: 01/10/2012, 11h18
  3. Réponses: 1
    Dernier message: 15/09/2010, 21h00
  4. Mêmes donnés mais résultats différents
    Par Chiwawa dans le forum Langage
    Réponses: 2
    Dernier message: 24/07/2009, 23h55
  5. 2 executions d'un programe C graphique avec SDL me donne des résultats différents
    Par Brin d'if dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/12/2007, 10h21

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