2010-06-19 8 views
1

J'ai une table qui se compose de id (auto_increment) nombre int (peut contenir des valeurs du 10 au 12) myvalue (varchar)disperser la structure relationnelle de la table MySQL

Ce que je veux faire est de disperser la structure relationnelle de ce tableau à des fins de rapport. C.-à-Id aiment avoir quelque chose comme:

id (auto_increment)

Number10 (contenant myvalue WHERE nombre = 10)

Number11 (contenant myvalue WHERE nombre = 11)

number12 (contenant ma valeur WHERE nombre = 12)

Je sais que je peux obtenir les résultats respectifs par SELECT myvalue FROM mytable WHERE nombre = 10;

mais je n'ai pas compris comment écrire ces trois instructions SELECT dans une seule table ou vue.

Merci d'avance!

+1

Quelle est votre question? –

+0

Une question aiderait. – thomasfedb

+0

désolé j'essayais d'utiliser la syntaxe html table qui n'a pas fonctionné ... pas c'est édité. –

Répondre

1

Cela pourrait faire ce dont vous avez besoin. Vous ne l'avez pas très bien expliqué, alors ce n'est peut-être pas le cas!

SELECT user, 
MIN(CASE WHEN number = 10 then myvalue end) AS number10, 
MIN(CASE WHEN number = 11 then myvalue end) AS number11, 
MIN(CASE WHEN number = 12 then myvalue end) AS number12 
FROM table 
WHERE number IN (10,11,12) 
GROUP BY user 
+0

@ Martin Smith et tous ceux qui ont aidé. merci beaucoup c'est exactement ce qui a fonctionné. Je suis vraiment désolé de la mauvaise explication. Malgré tout cela, vous l'avez compris! 1) Pouvez-vous s'il vous plaît expliquer pourquoi vous utilisez MIN - je voudrais vraiment comprendre ce qui se passe ... 2) @ Vin-G comment formater en tant que code ici? : D Encore une fois les gars! –

+0

@ ran2: indente chaque ligne de quatre espaces, ou sélectionne un bloc de texte puis clique sur l'icône 101010 (raccourci ctrk-k). Bien que vous ne puissiez le faire que pour les questions et réponses (pas dans les commentaires). –

+1

@ ran2: Visitez http://stackoverflow.com/editing-help pour plus de détails. –

1

Je ne reçois pas les choses « id Number10 Number11 de number12 », mais si vous voulez sélectionner les lignes avec le champ number correspondant à un ensemble de valeurs, il vous suffit de faire:

SELECT * FROM mytable WHERE number IN (10, 11, 12); 

Ou, alternativement, vous pouvez sélectionner un numéro gamme:

SELECT * FROM mytable WHERE number >= 10 AND number <= 12; 

Edit 2:

Vin-G a compris. J'étais façon off.

+0

désolé d'avoir posé cette question d'une manière si trompeuse. Ce que vous avez suggéré, c'est exactement ce que j'ai au début. Je veux transformer cette sortie en une table qui a le numéro 10, le numéro 11, le numéro 12 comme noms de COLONNE. Dans mon cas, je suis parfaitement sûr que myvalue contient exactement le même nombre de lignes pour chaque nombre. –

+0

@ ran2 Pouvez-vous donner un exemple de la sortie que vous obtenez de cette étape afin que nous puissions voir comment elle doit pivoter? Est-ce sur la base de l'identité? Ou est-ce que cela ne renvoie jamais exactement 3 enregistrements? –

2

Quelque chose comme ça peut-être ?:

SELECT 
    id, 
    IF(number=10, myvalue, NULL) AS number10, 
    IF(number=11, myvalue, NULL) AS number11, 
    IF(number=12, myvalue, NULL) AS number12 
FROM mytable 
+0

exactement! Je pense que vous venez de comprendre ce que je voulais dire. Bien que je ne puisse pas courir jusqu'ici, la syntaxe sage .... –

+0

D'accord, pas je l'ai eu. Fondamentalement, c'est ce que je veux avoir. Mais en raison de la valeur NULL, j'ai des lignes en alternance. Je veux juste qu'ils soient dans la même rangée s'ils appartiennent au même utilisateur (id). –

+0

@martin smith: dites juste qu'il y a une autre colonne d'utilisateur. à la requête de sélection ... hmm j'adorerais entrer une table ici ... serait beaucoup plus facile :) –

Questions connexes