[SQL] question toute bête

j’ai un table de la sorte

ID - VALUE
1 - 156
1 - 169
1 - 896
2 - 689
2 - 456

Et je voudrais un select sortant le résultat suivant

ID - VALUE1 - VALUE2 - VALUE3
1 - 156 - 169 - 896
2 - 689 - 456 -

Comment faire (sous SQL server)?

Réponse: impossible (ou si quelqu’un trouve une solution je lui envoie des fleurs. Mais d’un autre côté ça me paraît, au mieux, super chelou de vouloir faire un truc comme ça).

Je dirais la même chose que BodySplash, y compris pour les fleurs.

pour moi c’est impossible d’avoir 1 seule fois l’ID et plusieurs valeurs. Par contre, en faisant un bête group by id, t’as presque ce que tu veux, à savoir des ID, des valeurs, et toutes les valeurs qui correspondent à un même ID se suivent dans la réponse. Après, à toi de faire le (léger) traitement permettant de n’avoir qu’une seule fois l’ID…

En ligne impossible ! Maintenant tu peux faire des colones selon tes ID un truc du genre :

VALUE | ID1 | ID2

VALUE1 | 156 | 689
VALUE2 | 169 | 456
VALUE3 | 896 |

Voila bon courage !!!

C’est sale, c’est impossible et même dans le cas contraire il ne faut pas le faire.

Peux-tu nous donner l’utilisation que tu voudrais en faire pour t’orienter vers une solution propre.

Même avec les tableaux croisés dynamique d’Excel, on y arriverait pas. Je donne donc également ma langue au chat.

Impossible pour moi également. Enfin, je vois bien une méthode pour le faire, mais ca va au-delà du simple select. Pour le reste, je rejoins également mes petits camarades sur les catégories :

  • “Han, mais pourquoi donc ?”
  • “Dis nous en un peu plus”
  • “Beurk, c’est crade ton idée”

Je ne connais pas SQL server, mais sur d’autres sgbd c’est faisable en utilisant offset et limit et des jointures de la table avec elle-même. mais c’est quand même crade, et si tu as vraiment besoin d’une structure de ce genre tu ferais certainement mieux d’organiser tes données dans ton code à posteriori.

En SQL standard on ne peut effectivement pas résoudre ce problème qui est une FAQ. En SQL oracle en utilisant une fonction d’agrégat au dessus d’une fonction récursive on peut mais c’est vraiment pas top.

En général ce genre ce chose se fait du côté client.

B)
Une seule explication possible, le client c’est celui qui exécute le script, par opposition au serveur de données ?
Parceque sinon je vois pas …

côté IHM

[quote=“fser, post:10, topic: 45892”]B)
Une seule explication possible, le client c’est celui qui exécute le script, par opposition au serveur de données ?
Parceque sinon je vois pas …[/quote]

Y’a pas que PHP qui sert à attaquer une base de données mon cher Fser B) Et plus généralement l’application qui exploite les données de la base de données s’appelle un ‘client’, qui peut trier les données qu’il reçoit (même s’il convient souvent de faire faire un max du travail de tri par la base de données).

Il n’y a pas de solution propre, c’est juste pour extraire des données d’un base d’un format vers un autre (le second, le mal foutu). Je pensais bien que ce n’était pas possible mais je voulais juste être sûr de ne pas oublier un subtilité avant de faire un script.

Ben justement, ihm = interface homme machine, donc le client ça serait l’homme, non?
Fin c’est du hors sujet mais c’est pour ma “culture”.
(je maitrise pas du tout ce vocabulaire, que d’ailleurs je méprise plus qu’autre chose, il est selon moi juste source de masturbation de marketeux qui vont essayer de faire une pub technique pour bien faire en essayant d’inventer des mots pour aller fourer leur nez du côté des programmeurs, mais ça n’est pas la question ici).

Roh bah tient tu m’en dira tant … (pour php).
Merci des précisions B)

Hein? Heu non “ce vocabulaire” est super mega loin du marketting, c’est le vocabulaire utilise dans le metier pour savoir de quoi on parle et avoir un truc commun. Sinon on arrive a rien faire. Chaque metier a son vocabulaire, du docteur au menuisier. Quand t’as un serveur (SQL en l’occurence), les trucs qui y accedent c’est un client. Firefox/IE/Opera c’est des clients de apache ou de IIS pareil.

Hum, je crois que c’est possible, j’ai déjà vu ce genre de requete qq part. En fait, dans ta select tu effectues un encapsulation de SELECT. Mais ca demande aussi que ta requetes soit de type procédure stocké, pcq là t’aura besoin d’une variable.

En gros ca doit donner ca (me rapelle plus de la syntaxe exacte pour déclarer une variable pour les procstock) :
[sql]DECLARE @identifiant int
SELECT @identifiant = ID, (SELECT Value FROM myTable WHERE ID = @identifiant)
FROM myTable[/sql]

Edit : et merde, bon, faut que je retrouve la requete.

Meme si ca marche: beuark B)

Moi, sur mon SqlServer2000, j’ai ca :

“Serveur : Msg 141, Niveau 15, État 1, Ligne 2
Une instruction SELECT qui affecte une valeur à une variable ne doit pas être combinée avec des opérations d’extraction de données.”

Ouais, je sais :smiley: c’est sa ou rien B) Elred → j’ai édité la requete (pour mettre les bonne syntaxe). Après, bon j’ai jamais eu ton message d’erreur B)

Tant qu’à être dans le beurk, sous Oracle, pour les courageux, cherchez du côté de COLLECT ou encore STRAGG de notre cher oncle Tom.

Mais bon, je plussoie sur le côté client… sigh