Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2011, 21h45   #1
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Par défaut Utilisation du sigle "%"

Bonjour Forum,

J'ai un problème avec l'utilisation du "%"

je suis dans excel et j'effectue une requête dans un base SQL

Au départ j'ai une liste de contrats (Nombre de contrats variable)
Ensuite j'ai 2 autres critères, le secteur et le département

Mon but est donc d’obtenir le nombre d'heures d'un département et secteur précis pour différents projets.

Je me suis tourné vers deux alternatives,

1)En premier lieu l'opérateur "IN", je pouvais donc avec une boucle, inclure le nombre de projets que je désirais, le problème est que certain NoProjet contiennent des extras, donc le contrat original est par exemple AB6003, et son extra AB6003-1.

Alors 1er question puis-je inclure l'opérateur LIKE dans l'opérateur "IN" du tu

Code :
WHERE IN LIKE ('AB6003%','RR1231%',..,n) AND departement=2 AND secteur=3
2) J'utilise le "OR", j'utilise encore un boucle pour ajouter des critère OR
EX:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
strSQlHrsTech = "SELECT O.NoProjet, SUM(O.Hrstotal) as HrsTotal FROM operation O, employe E WHERE ("
 
        critere = ""
        FOR i = 4 TO 9
            critere = critere & "(O.NoProjet LIKE '" & Cells(i, 1).Value & "%') OR "
        Next i
 
    strSQlHrsTech = strSQlHrsTech & critere
    strSQlHrsTech = LEFT(strSQlHrsTech, Len(strSQlHrsTech) - 3)
    strSQlHrsTech = strSQlHrsTech & ") AND E.GrandSecteur=2 AND O.Departement=" & noprod & " AND E.NoUtilisateur = O.NoUtilisateur GROUP BY NoProjet"
Ce qui donne cette chaîne
Code :
"SELECT O.NoProjet, SUM(O.Hrstotal) as HrsTotal FROM operation O, employe E WHERE ((O.NoProjet LIKE 'AB6003%') OR (O.NoProjet LIKE 'AB4938%') OR (O.NoProjet LIKE 'US5938%') OR (O.NoProjet LIKE 'AB5699%')) AND E.GrandSecteur=2 AND O.Departement=" & noprod & " AND E.NoUtilisateur = O.NoUtilisateur GROUP BY NoProjet"
ma requête fonctionne bien c'est juste qu'elle n'inclut pas les extra.

Pouvez-vous m'indiquer comment faire, ça fait un bail que j'essaie et je n'arrive a rien!!

merci d'avance
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 19h35   #2
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
Bonjour,

Ta syntaxe ne correspond pas à du SQL
La deuxième option me paraît la bonne, il suffit juste, si les projet parent ont toujours 6 caractères, que tu remplaces O.NoProjet par la sous-chaîne des 6 premier caractères et faire le group by dessus comme ceci :

Code :
1
2
3
4
SELECT SUBSTRING(O.NoProjet,6) AS NumeroProjet, SUM(O.Hrstotal) AS HrsTotal
 FROM operation O, employe E 
 WHERE ((O.NoProjet LIKE 'AB6003%') OR (O.NoProjet LIKE 'AB4938%') OR (O.NoProjet LIKE 'US5938%') OR (O.NoProjet LIKE 'AB5699%'))
 AND E.GrandSecteur=2 AND O.Departement=" & noprod & " AND E.NoUtilisateur = O.NoUtilisateur GROUP BY SUBSTRING(O.NoProjet,6)"
Cordialement
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 22h19   #3
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Quelques rares SGBD acceptent cette syntaxe normalisée chaine LIKE ANY ('abc%', 'bdc%', ...)

Sinon tu peux aussi passer par une jointure :
Code :
1
2
3
4
5
6
7
8
9
SELECT  ...
FROM    matable AS tbl
    INNER JOIN
        (   SELECT  'abc' AS modele
        UNION
            SELECT  'bcd'
        ...
        )   AS mdl
        ON  tbl.chaine LIKE mdl.modele || '%'
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 14h21   #4
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Merci à vous deux!!

Je n'ai pas testé celle de al1_24, mais celle de semaphore1984 fonctionne alors merci des suggestion.

Salut
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 14h27   #5
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Y'aurait aussi cette technique :

Code :
1
2
3
4
5
6
SELECT
	MesColonnes
FROM
	MaTable
WHERE
	SUBSTRING(MaColonneTest,6) IN ('AB6003','RR1231',...,n) AND ...
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h32.


 
 
 
 
Partenaires

Hébergement Web