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 :

SQL SERVER 2000 ET RESULTAT DE REQUÊTE


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut SQL SERVER 2000 ET RESULTAT DE REQUÊTE
    Salut à tous.
    Je dois importer dans Excel des informations issue d'une base sous SQL Server 2000.
    Voici la requête en question
    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
    23
     
    SELECT     
     F_ARTSTOCK.AR_Ref, 
     F_ARTICLE.AR_Design,
     F_ARTICLE.FA_CodeFamille,
     F_DEPOT.DE_Intitule, 
     F_ARTSTOCK.AS_QteMini, 
     F_ARTSTOCK.AS_QteSto,
     (F_ARTSTOCK.AS_QteMini - F_ARTSTOCK.AS_QteSto) AS AS_QteTransfert,
     F_ARTICLE.AR_Stat01 AS Pathologie,
     F_ARTICLE.AR_Stat03 AS CatQte,
     F_ARTICLE.AR_Stat04 AS CatValeur,
     F_FAMILLE.FA_Central AS Central
    FROM F_ARTSTOCK 
     INNER JOIN F_ARTICLE ON F_ARTICLE.AR_Ref = F_ARTSTOCK.AR_REF
     INNER JOIN F_DEPOT ON F_DEPOT.DE_No = F_ARTSTOCK.DE_No
     INNER JOIN F_FAMILLE ON F_FAMILLE.FA_CodeFamille = F_ARTICLE.FA_CodeFamille
    WHERE    
     (F_ARTSTOCK.AS_QteMini > F_ARTSTOCK.AS_QteSto) AND
     (F_ARTSTOCK.DE_No = 1) AND
     (F_FAMILLE.FA_Central >= 'ACC%') AND
     (F_FAMILLE.FA_Central <= 'ALL%')
    ORDER BY F_FAMILLE.FA_Central
    Si j'enleve les deux dernieres conditions (sur FA_Central), le résultat de la raquête est juste.
    Si je met (F_FAMILLE.FA_Central >= 'ACC%') le resultat est juste aussi
    Mais avec cette requête, il me sort juste les FA_Central avec commencant par AC; alors qu'il existe bien des FA_CENTRAL comme ALLOPATHI .

    Donc, la question est comment avoir les lignes commencant entre 'ACC' et 'ALL'

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Tu peux essayer la condition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LEFT(FA_CENTRAL,3) >= 'ACC' AND LEFT(FA_CENTRAL,3) <= 'ALL'
    Pourrais-tu me dire si cette solution est convenable.

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Le souci réside dans le fait que les paramètres peuvent être constitué de plusieurs caractères.
    En faites, une petite appli permet de saisir les critères et ce là que ça bloque. Je ne sais pas à l'avance ce que l'opérateur va taper.
    Mais je peux toujours arranger en attendant de trouver mieux
    merci

  4. #4
    Membre très actif Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Par défaut
    Sinon t'a qu'a faire une fonction qui prend les 3 premiere caractere du mot, les transforme en chiffre, et compare

    Tu mettrais comme critere:
    AND dbo.fn_IsValid(Subtring(LEFT(FA_CENTRAL, 3))) = 1


    Exemple de fonction:
    CREATE FONCTION dbo.fn_IsValid(@var varchar(3))
    AS

    SET @var = Replace(@var, 'A', '01')
    SET @var = Replace(@var, 'B', '02')
    SET @var = Replace(@var, 'C', '03')
    SET @var = Replace(@var, 'D', '04')
    etc...
    SET @var = Replace(@var, 'Y', '25')
    SET @var = Replace(@var, 'Z', '26')

    if (convert(int, @var) between 010303 AND 012222)
    RETURN 1
    ELSE
    RETURN 0

    GO

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Pour résoudre votre problème il suffit de jouer sur les collations :

    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 S.AR_Ref, 
           A.AR_Design,
           A.FA_CodeFamille,
           D.DE_Intitule, 
           S.AS_QteMini, 
           S.AS_QteSto,
           S.AS_QteMini - S.AS_QteSto AS AS_QteTransfert,
           A.AR_Stat01 AS Pathologie,
           A.AR_Stat03 AS CatQte,
           A.AR_Stat04 AS CatValeur,
           F.FA_Central AS Central
    FROM   F_ARTSTOCK S 
           INNER JOIN F_ARTICLE A 
                 ON A.AR_Ref = S.AR_REF
           INNER JOIN F_DEPOT 
                 ON D.DE_No = S.DE_No
           INNER JOIN F_FAMILLE F 
                 ON F.FA_CodeFamille = A.FA_CodeFamille
    WHERE  S.AS_QteMini > S.AS_QteSto
     AND   S.DE_No = 1
     AND   F.FA_Central BETWEEN 'ACC' AND 'ALLŽŽŽŽŽŽŽ' COLLATE French_CS_AS
    ORDER BY F.FA_Central
    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...er/collations/

    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
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Bonjour,
    Très bon demonstration SQLPro.
    J'ai lu ausis le tuto proposé dans la réponse, et je pensais que ça me suffirait mais helas non :
    En effet, j'ai listé la liste fe FA_Central et voici la liste effective :
    ' ','ACCE','ALLOPATHIE','COS','DIET','DISPME','ECHANT','FGX','HOMEOPATHI',
    'HYG','MAG','MESURE','PHYTO','PRODCHIM','PUE','SOINS','TEMP','TEST','VETO'
    Alors SQLPro, pourquoi avec cette condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F.FA_Central BETWEEN 'ACC' AND 'ALLŽ' COLLATE French_CI_AS
    le résultat est correcte mais pas avec celui ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F.FA_Central BETWEEN 'ACC' AND 'ALL%' COLLATE French_CI_AS
    or avec un autre caratère

    Merci

Discussions similaires

  1. SQL SERVER 2000 ET RESULTAT DE REQUÊTE
    Par Andry dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/11/2007, 07h01
  2. [SQL Server 2000] Requête tordue
    Par magellan94 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/08/2006, 13h25
  3. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54
  4. Requêtes analyses croisées sous SQL Server 2000
    Par callo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/09/2005, 19h27
  5. [SQL Server] Limiter le resultat d'une requête
    Par obiwan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2004, 11h25

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