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 :

Renseigner plusieurs champs avec Case [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Points : 57
    Points
    57
    Par défaut Renseigner plusieurs champs avec Case
    Bonjour,

    Je dois créer une Vue et souhaite renseigner les données de Trois colonnes avec des CASE WHEN. Je travaille sur Sage (progiciel compta) et je vais chercher dans la Table Ecriture des données des comptes "CG_Num" qui commencent par un 6 (Achats) ou un 7 (Ventes) soit environ 15000 lignes de données.
    En fonction du Numéro de compte je souhaite définir dans ma vue les colonnes "Tri, Code et Désignation". Je serai le faire en faisant 3 CASE (1 par colonne) mais bon, il y a près de 200 lignes de CASE à écrire à chaque fois. Ci dessous ce à quoi ça ressemble en partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SELECT
    Tri = '',
    Code = '',
    DATE = E.JM_Date,
    Designation =  CASE LEFT(E.CG_Num,2)
    				  WHEN 70 THEN 
    					CASE LEFT(E.CG_Num,4)
    						WHEN 7043 THEN 'Maçonnerie'
    						WHEN 7044 THEN 'Charpente'
    						WHEN 7045 THEN 'Couverture Tuile'
    						WHEN 7041 THEN 'Menuiserie'
    						WHEN 7042 THEN 'Platrerie'
    						WHEN 7040 THEN 'Carrelage'
    						WHEN 7088 THEN
    						  CASE LEFT(E.CG_NUM,6)
    							WHEN 708801 THEN 'Electricité'
    							WHEN 708804 THEN 'Plomberie'
    							WHEN 708802 THEN 
    							  CASE WHEN E.CG_NUM = 70880220 THEN 'Prorata' END
    						  ELSE 'Autres Produits'	
    						  END				  
    					ELSE 'Autres Produits' END
    Ceci n'est tout petit échantillon et je souhaiterai pouvoir faire quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CASE LEFT(E.CG_Num,2)
    				  WHEN 70 THEN 
    					CASE LEFT(E.CG_Num,4)
    						WHEN 7043 THEN 
                                                          Tri = 1
                                                          Code = 10
                                                          Designation = 'Maçonnerie'
                                                    WHEN 7044 THEN 'Charpente'
                                                          Tri = 2
                                                          Code = 10
                                                          Designation = 'Charpente'
    Vous l'aurez compris mon niveau en SQL est un peu limité. Donc si je pouvais avoir une aide sur la syntaxe que je n'arrive pas à trouver je suis preneur.
    Merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Points : 71
    Points
    71
    Par défaut
    bonjour,

    Je vois 2 solutions pour faciliter l'affaire :
    - soit stocker 3 informations supplémentaires dans la table des comptes
    - soit se faire une petite table qui va stocker l'association racineCompte, tri, code, Designation.

    Le choix entre les 2 dépend du contexte.

  3. #3
    Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Merci pour le retour
    J'ai bien pensé à l'une ou l'autre mais la problématique resterait entière (J'ai fait le test). Il faudrait une quantité astronomique de SELECT avec des clauses WHERE différentes à chaque fois. Il faut se dire que l'exemple montré n'est qu'un minuscule échantillon.
    Et là je coince...

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Points : 71
    Points
    71
    Par défaut
    L'idée des 2 solutions, c'est justement de ne plus avoir de CASE.

    exemple avec la table de lien pour stocker les infos :
    appelons la : LienCpt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE TABLE LienCpt (
       prefixeCompte varchar(10) NOT NULL, Tri int, Code varchar(10), Designation varchar(100)
    )
    restera à mettre une clef sur cette table avec RepfixeCompte.

    pour remplir cette table, j'utiliserais EXCEL qui permet de saisir rapidement.

    la requete devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ECR.Date, LIEN.Tri, LIEN.Code, LIEN.Designation
    FROM ECRITURE ECR
    INNER JOIN LienCpt LIEN ON LIEN.PrefixeCompte = SUBSTR(ECR.NoCompte, 1, 4)

  5. #5
    Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Bonjour,
    J'ai fait comme tu as dit. Ca marche pas mal
    Merci

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 17/06/2010, 18h25
  2. update de plusieurs champs avec sous requete
    Par MarcS dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 03/05/2008, 14h45
  3. Ajouter plusieurs champs avec ALTER
    Par apobrzroms dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/02/2008, 23h07
  4. Concaténer plusieurs champs avec des valeurs uniques
    Par stefposs dans le forum VBA Access
    Réponses: 10
    Dernier message: 30/05/2007, 17h42
  5. Requête sur plusieurs champs avec LIKE
    Par zestrellita dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/04/2007, 14h58

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