2012-11-30 50 views
0

单行我有一个表像 `多行数据组合到特定列

name id date  login logout 
arjun 1 2012-11-28 9-30 7-30 
arjun 1 2012-11-29 9-30 8-00 
arjun 1 2012-11-30 9-40 8-00` 

我要查看该表作为

` 
name id date  login logout 
      2012-11-28 9-30 7-30 
arjun 1 2012-11-29 9-30 8-00 
      2012-11-30 9-40 8-00` 

这可能吗?如果是的话如何?

+0

要存储在SQL中吗?我不知道这是如何可能的。如果您正在讨论将其展示给用户,我们需要有关您使用的技术的更多信息(例如报告工具,网站,Windows应用程序......)。作为一个方面说明,可能值得使表格正常化来创建一个用户表。 – Greg

+0

在哪个基础上你决定阿尔琼应该显示在第二排? –

+0

这要做,当我显示给用户,我正在做的Windows应用程序 – Preethi

回答

0

您可以与MySQL

Select 
    name , 
    id , 
    group_concat(date) as `Date`, 
    group_concat(login) as login_time, 
    group_concat(logout) as logout_time 
from mytable 
group by name 

的GROUP_CONCAT在前端就可以使用循环按照您的要求,以显示做。如果你使用PHP,你可以使用PHP的爆炸函数。如果有其他事情,那么试着找出如何爆炸细胞价值。

+0

这非常有用,谢谢 – Preethi

0

假设你的表名是“table55”

然后使用下面的查询来创建存储过程

delimiter | 
create procedure testProcedure() 
BEGIN 
declare flag1 int default 0; 
DECLARE done INT DEFAULT FALSE; 
declare tempid int; 
declare tempdate date; 
declare tempname,templogin,templogout varchar(50); 
DECLARE cur1 CURSOR FOR SELECT * from table55 where `name` like 'arjun' and id=1; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
drop table if exists mytemptable; 
CREATE TEMPORARY TABLE IF NOT EXISTS mytemptable (`name` VARCHAR(50) NULL DEFAULT NULL, 
    `id` INT(11) NULL DEFAULT NULL, 
    `date` DATE NULL DEFAULT NULL, 
    `login` VARCHAR(50) NULL DEFAULT NULL, 
    `logout` VARCHAR(50) NULL DEFAULT NULL); 

OPEN cur1; 

read_loop: LOOP 
FETCH cur1 into tempname,tempid,tempdate,templogin,templogout; 
if flag1=0 then 
    insert into mytemptable(name,id,`date`,login,logout) values (tempname,tempid,tempdate,templogin,templogout); 
    set flag1=1; 
else 
    insert into mytemptable(name,id,`date`,login,logout) values ('',null,tempdate,templogin,templogout); 
end if; 
IF done THEN 
     LEAVE read_loop; 
    END IF; 

END LOOP; 
select * from mytemptable; 
END 
| 
delimiter; 

你有上面的查询只运行一次。之后,您可以使用以下查询获得所需的结果

call testProcedure