|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2008 Messages : 202 ![]() |
* Bonjour, *
Je sais vous allez me dire que ce que je demande est crados mais il faut que ça fonctionne comme ça, pas d'explication... Code :
Je veux qu'elle concatène toutes les valeurs de champ2 (en séparant par un tiret même si possible) D'après ce que j'ai lu sur les docs, il faut que je créé une fonction (stockée) et que je créé un truc un peu bizarre en VB ou en C#. Je veux juste savoir si il existe une méthode plus simple. Merci |
||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() |
Citation:
Fait une fonction scalaire prenant en paramètre champ1 et qui concatène champ2 et le retourne.... [Edit] Dis nous en un peu plus: comment exploitera tu ce champ2 concaténé? [/Edit] |
|
|
|
00
|
|
|
#3 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Même remarque que iberserk ...
Citation:
D'un autre côté la colonne (et non pas le champ) 2 devrait contenir une seule valeur... encore une modélisation m... Bref. Donc sans exemple de ce que vous avez, difficile de vous aider. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Cette demande de fonction d'agrégation est une pure bêtise. En effet une fonction d'agrégation n'a, par essence, aucun ordre séquentiel de traitement.
Par exemple SUM qui est réellement une fonction d'agrégation, donne le même résultat si je commence dans l'ordre du plus petit au plus grand, ou inversement, ou en faisant plusieurs sommes partielle puis une somme finale des sommes partielles. Or les les bases de données relationnelles fonctionnent de manière ensembliste ce qui veut dire que toutes les opérations non ordonnées (c'est à dire la plupart) peuvent être jouées avec plusieurs threads en parallèle ! Il n'en va généralement pas de même avec la concaténation de chaines, qui, la plupart du temps nécessite un ordre de traitement séquentiel ! En conclusion il ne s'agit pas d'une agrégation de données. Il existe c'est vrai quelque SGBD non relationnel comme MySQL (en fait un ersatz de SGBDR : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/) qui proposent une telle ineptie, par exemple avec la fonction GROUP_CONCAT ! La solution consiste donc à utiliser une requête récursive pour ordonner cette concaténation. J'ai donné un exemple ici : http://sqlpro.developpez.com/cours/s...ursives/#LIV-D A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 | |
|
Membre Expert
![]() |
Citation:
Je ne serais pas surpris qu'il s'en serve ensuite dans son code client en utilisant un SPLIT() par exemple... Comme dirais Mr SEMOUN "C'est pas joli joli" |
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2008 Messages : 202 ![]() |
Je sais, tout ceci n'est pas dans les règles de l'art.
Clairement, le champ concaténé sera INEXPLOITABLE mais ce n'est pas vraiment mon problème. Tu dit qu'il est possible de faire une fonction scalaire sans passer par un assembly mais je n'y arrive pas. As tu un exemple quelque part ? Merci |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() |
Tu n'as pas dû chercher beaucoup...
Exemple: Code :
Reste le problème remonté par SQLPRO concernant l'ordre des éléments dans la liste, mais peut être celui-ci n'a aucune importance? Si j'ai bien compris on t'oblige à faire çà... Attention à ne pas être poursuivi pour complicité
|
||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2008 Messages : 202 ![]() |
Merci pour ta réponse mais cette technique est très très lente car il faut scruter la table pour chaque enreg à retourner.
J'ai beau mettre des index, c'est long... Quand on utilise une fonction comme MAX() ou MIN(), ça travaille pas sur toutes les lignes, mais juste celles identifiées lors du group BY... Merci |
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() |
Citation:
|
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Je vous ais donné la solution, mais visiblement vous ne lisez pas....
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com