2010-03-04 225 views
2

我有一个表,例如,“mytable”。它有几列:col1,col2,col3。有一些数据在里面,放在这样的:MYSQL:删除空单元格

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

出于某种原因,我需要的表,格式类似:

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

我想我可以做类似INSERT INTO "mytable" ("col1") VALUES (SELECT "col1" FROM "mytable" WHERE "col1"<>'') 和等,但当然它不起作用。

任何想法? =)

回答

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

+1 |不知道人们可以有一个与GROUP BY算术表达式,但如果这是辉煌的。 – aefxx 2010-03-04 13:52:41

+0

天哪,你可以学习很多阅读这个网站! – 2010-03-04 15:02:39

2

HMM的我认为模不会工作,因为它被重复..
例如0,1,2,0,1,2,...
你将需要:

GROUP BY (id - 1)/3 

所以,你得到:0,0,0,1,1,1,2,2,2, ...
连续3行被选中并合并。

但我不能肯定是否有可能在GROUP使用算术运算BY子句,因为通常你只能通过一列组

[编辑]
我已经测试了一些东西,对我来说( mysql)GROUP BY中的划分/模块将不起作用。
但我的东西,似乎为我工作:

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` 

玩得开心:)

+0

对,感谢您的注意。分区也不会工作(它会产生FLOAT结果),您需要在这里使用整数除法('DIV')。 – Quassnoi 2010-03-04 14:14:20

0

为了删除空单元给这个简单的查询:

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

如果这将删除三列中的所有空单元格。确保在执行此操作之前设置auto commit = 0;