Accueil > Forum > > > > sélection différente suivant contenu d'un champ
sélection différente suivant contenu d'un champ
samedi 3 décembre 2011 à 23:00:51 |
sélection différente suivant contenu d'un champ

casy
|
Salut à tous.
(Le titre est un peu bidon, je ne sais pas trop résumer mon problème)
J'ai une requete particulière à faire, et je manque d'inspiration.
Le contexte :
J'ai une table produit avec diverses informations et dont le code (clé primaire) est codé de la sorte : référence ou référence-indice (ex: ABC, CDF, GHF-A, GHF-B, MLK, OIU-D,OIU-H, ....). L'indice, quand il existe est généralement 1 lettre, parfois 2.
La requête :
Je dois récupérer une liste pour charger le datasource d'une grille, liste comportant toutes les références sans indice ainsi que, pour les références avec indice, seulement la référence avec l'indice le plus élevé.
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 4 décembre 2011 à 13:10:28 |
Re : sélection différente suivant contenu d'un champ

cgandco
|
Bonjour,
Deux petites questions :
1) Quel est le type de ton champ ?
2) La reference comporte toujours 3 caractères ?
Bonne journée
Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
|
|
dimanche 4 décembre 2011 à 13:42:55 |
Re : sélection différente suivant contenu d'un champ

casy
|
Le champ est de type chaine de caractère, équivalent varchar sous sqlserver, longueur maxi 19 caractères.
Non les références sont de longueur variable (3 caractères c'est le hasard des exemples donnés). Pour celles qui ont un indice, celui-ci est toujours séparé de la réfécence par le caractère - et de longueur variable (normalement 1 caractère, mais j'ai quelques références mal codifiées avec un indice sur 2 caractères, mais il n'est pas impossible que d'autres mauvaises codifications à l'avenir, entrainent des indices sur plus de caractères)
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 4 décembre 2011 à 19:43:50 |
Re : sélection différente suivant contenu d'un champ

pradiergael
|
Bonjour,
Je m'interroge sur le bienfondé de conserver deux informations dans un seul champ. Ceci ne respecte pas la première forme normale !!
Il serait peut-être souhiatable de créer une colonne indice, colonne nullable.
Cela étant dit, je vous propose de faire ceci:
Code : select ... from Table where code not like '%-%'
union
select ... from Table T where exists
( select 1
where T.code = select code
from
( select max(code) as code ,code_seul
from
(
select code,
substring(code,1,charindex(code,'-')-1) as code_seul
from Table where code like '%-%'
) tmp
group by code_seul
)
)
en terme de performances, ajouter une colonne index vous permettrait qd même d'optimiser largement ce genre de requete
en terme
|
|
dimanche 4 décembre 2011 à 20:51:18 |
Re : sélection différente suivant contenu d'un champ

casy
|
Je ne maitrise pas la structure de la table (y compris les index) puisque elle appartient à un logiciel commercial. Mais la colonne en question étant la clé primaire, j'ose espérer que l'index y est bien créé dessus.
Quant à la notion de référence/indice, c'est une notion de codification propre à l'organisation de l'entreprise. Pour le logiciel, cette colonne est une référence article unique, indépendamment de sa codification.
La performance est ce qui va poser le plus de problème. Je suis obligé de passer par un driver ODBC propriétaire pour attaquer la base, driver qui est d'une lenteur extrême. J’essaierais, normalement demain, cette requete, mais vu sa constitution, je m'attend déjà, pour environ 9 à 10 000 lignes retournées à une exécution de plusieurs minutes.
Une des solutions serait de passer sur une base SQL, mais, là, le problème est le coût prohibitif (pour une entreprise extrêmement radine) des licences à changer.
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 4 décembre 2011 à 22:23:09 |
Re : sélection différente suivant contenu d'un champ

pradiergael
|
Réponse acceptée !
solution commerciale ... j'espère que c'est pas cher !
concernant ma proposition précédente, il manque une vérif d'égalité sur code_seul et substring(T.code,1,charindex(T.code,'-'))
concernant la requête, s'il s'agit de SQL 2005 ou 2008, il devrait être interessant d'utiliser les CTE :
Code : with TMP as
(
select max(code) as code,code_seul
from ( select code, substring(code,1,charindex(code,'-')-1) as code_seul
from Table where code like '%-%') t1
group by code_seul
)
select xxx,yyy from Table where code not like '%-%'
union
select T.xxx,yyy from Table T inner join TMP on T.code = TMP.code
ca parait plus simple comme ceci, et plus rapide
|
|
dimanche 4 décembre 2011 à 22:47:55 |
Re : sélection différente suivant contenu d'un champ

casy
|
Solution commerciale quand même pas donnée (SAGE100)
Ce n'est pas vraiment le logiciel qui est en cause, mais l'utilisation qui en est faite. Et encore, tout ça est très récent (2 mois), les données viennent, elles, d'une appli interne qui a plus de 15 ans et dont le but est d'en abandonner une partie seulement, pour la remplacer par SAGE100.
D’où la contrainte, on supprime une partie, donc à adapter au nouveau logiciel, mais on ne peut rien casser car il faut garder la compatibilité avec ce qui reste et donc tous les historiques, etc ...
Donc pour résumer, on change le logiciel mais on garde toutes les merdes faites depuis 15ans, et en plus, on est obliger de faire des contorsions pour que tout ce la marche à peu près.
Pour SQL, c'est du 2000, sur un WS2003-32 avec 4Go de ram, qui est aussi contrôleur AD, serveur Exchange, contrôleur AV (sophos), serveur de fichier, contrôleur de backup, serveur web pour 3 sites dont l'intranet, serveur FTP, et j'en oublie surement.
Le pauvre serveur, il est sur les genoux. Mais à part dire que ça rame, ça n’inquiète pas grand monde
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
lundi 5 décembre 2011 à 17:11:36 |
Re : sélection différente suivant contenu d'un champ

casy
|
Bon les requetes ne marchent pas.
Le "Select 1 Where" est vu comme une erreur de syntaxe, le "With TMP .." n'est pas reconnu non plus.
Ce driver ODBC est vraiment une merde.
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
lundi 5 décembre 2011 à 22:03:44 |
Re : sélection différente suivant contenu d'un champ

pradiergael
|
Réponse acceptée !
Bonjour,
se trainer les boulettes vieilles de 15 ans pour assurer la compatibilité, je connais !!
sonon, odbc n'est pas en cause, c'est la version (SQL 2000) : elle ne sait pas utiliser les CTE (with ...)
essayons ceci :
Code : select xxx,yyy from Table where code not like '%-%'
union
select T.xxx,T.yyy from Table T
inner join
( select max(code) as code,code_seul
from ( select code, substring(code,1,charindex(code,'-')-1) as code_seul
from Table where code like '%-%') t1
group by code_seul
) as TMP on T.code = TMP.code
En espèrant que ce soit plus probant.
|
|
lundi 5 décembre 2011 à 22:22:08 |
Re : sélection différente suivant contenu d'un champ

casy
|
Heuu, pour le coup, j'ai fait les tests en direct sur l'odbc, sans passer par SQL2000, donc ça ne vient pas de SQL2000.
Mais le driver odbc de Sage n'est pas mieux, et même pire. Il n'accepte pas tout, ne connais pas par exemple la requete paramétrée, ...
Si tu ne le connais je te conseille vivement ..... de n'avoir jamais à le connaitre.
J’essairai ça demain, mais je pense déjà que le "inner join ( select" risque de pas passer.
Sinon, je vais pas batailler des heures non plus. J'expliquerais que ce n'est pas possible et que s'ils veulent que ce soit possible, il faudra sortir de chéquier pour passer à la version full-SQL
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
Cette discussion est classée dans : référence, sélection, contenu, indice, différente
Répondre à ce message
Sujets en rapport avec ce message
requete croisement de table [ par sdisp ]
Bonjour, je souhaiterais pouvoir croiser des ligne dans mon tableau, je expliques, j'ai une table de se genre: id id_suivant référence 1 3 10 2 1 1
je ne peu plus afficher le contenu d'une table [ par abdoo05 ]
salut, j'ai crée un pg avec java qui permet d'afficher le contenu d'une table de base de donnée... mais le pb est que ma table est trop chargé et je n
Générer un indice [ par atmeitsatme ]
Bonjour,J'ais une table qui possède un champ indice qui est une clé primaire.Cette clé est juste une donnée qui permet de ne pas avoir de doublons.Je
Faire une boucle de INSERT INTO [ par IdrilElendil ]
Bonjour, j'essaie de faire une boucle pour insérer plusieurs lignes de suite dans une table d'Access via une procédure en VBA. For Indice = 1 To 3
copier le contenu d'une table dans une autre [ par biloutte33 ]
bonjour,j'aimerais savoir quel requete faut-il que j'execute pour copier le contenu d'une table (le contenu pas les champs!) à une autre?genre par exe
Clause Where différente [ par babe59 ]
Bonjour,Je fais une procédure stockée sous SQL Server pour retourner une liste de records. J'aimerai passer un paramétre (@param) à cette proc pour re
contenu de la table sql [ par beny100 ]
bonjour,j'ai un problème pendant mon export en excel même quanr le contenu de la table d'ou la requette s'effectue est vide elle me renvoie une page e
Sélection les N premiers mots d'un champ texte [ par keskispas ]
Bonjour tout le monde !Je cherche quelque chose de super simple : Retourner les N premiers mots d'un champ de texte.Dans ce cas, le séparateur serait
choix champs Texte ou Memo / optimisation [ par yan35 ]
Bonsoir,Je voudrais optimiser 1 base Access qui commence à ramer avec 40000 enregistrements d'une longueur de plus de 400 octets, dans 1 table.J'ai un
Langue base de données différente que celle du serveur [ par bossun ]
Salut,J'ai un serveur SQL 2005 en Anglais (us_English)J'ai besoin qu'au moins une de mes base soit localisé en fr_Switzerlandà quel niveau dois-je def
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : ORACLE FORMSRE : ORACLE FORMS par csmahicham
Cliquez pour lire la suite par csmahicham
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|