2010-03-04 12 views
2

J'ai une table, par exemple, "mytable". Il a plusieurs colonnes: col1, col2, col3. Il y a certaines données en elle, placée comme ça:MYSQL: supprimer des cellules vides

 
id col1 col2 col3 
1 aasdas   
2   acxvxc 
3     dgdgdff 
4 hfgdgh   
5   jmjkh 
6     dfgdfgd 
7 bcbxcb 

Pour une raison quelconque, je dois table, formaté comme ça:

 
id col1 col2 col3 
1 aasdas acxvxc dgdgdff 
2 hfgdgh jmjkh dfgdfgd 
3 bcbxcb  

Je pensais que je pouvais faire quelque chose comme INSERT INTO "mytable" ("col1") VALUES (SELECT "col1" FROM "mytable" WHERE "col1"<>'') et etc, mais Bien sûr, cela ne fonctionne pas.

Des idées? =)

Répondre

2
SELECT MAX(col1), MAX(col2), MAX(col3) 
FROM mytable 
GROUP BY 
     (id - 1) DIV 3 
+0

+1 | Je ne savais pas que l'on pouvait avoir une expression arithmétique avec GROUP BY mais si c'est génial. – aefxx

+0

Gosh, vous pouvez apprendre beaucoup en lisant ce site web! –

2

hmm je pense que le modulo ne fonctionnera pas parce qu'il répète ..
par exemple 0, 1, 2, 0, 1, 2, ...
Vous aurez besoin:

GROUP BY (id - 1)/3 

Ainsi, vous obtenez: 0, 0, 0, 1, 1, 1, 2, 2, 2, ...
Et 3 lignes consécutives sont sélectionnées et fusionnées.

Mais je ne suis pas tout à fait sûr s'il est possible d'utiliser des opérations arithmétiques dans la clause GROUP BY car, normalement, vous ne pouvez regrouper par une seule colonne

[modifier]
J'ai testé certaines choses et pour moi (mysql) la division/modulo dans GROUP BY ne fonctionnera pas.
Mais j'ai quelque chose qui semble fonctionner pour moi:

SELECT `id`, MAX(`column1`) AS `col1`, MAX(`column2`) AS `col2`, MAX(`column3`) AS `col3` FROM 
(SELECT ROUND((`id`-2)/3, 0) AS `id`, MAX(`col1`) AS `column1`, MAX(`col2`) AS `column2`, MAX(`col3`) AS `column3` FROM `test` GROUP BY `id`) AS `temp` 
GROUP BY `id` 

Have Fun :)

+0

Bien, merci de le remarquer. La division ne fonctionnera pas non plus (elle donnera le résultat 'FLOAT'), vous devez utiliser la division entière ('DIV') ici. – Quassnoi

0

Pour supprimer des cellules vides donnent à cette requête simple:

delete from [table_name] where [col1] and [col2] and [col3] = ' '; 

Lorsque cela supprimera toutes les cellules vides dans les trois colonnes. Assurez-vous avant d'effectuer cette opération de définir la validation automatique = 0;

Questions connexes