2015-12-21 67 views
0

我有一个结构类似这样的数据集之间基于INT区别其他行:选择两列

Make|StartYear|EndYear 
---------------------- 
AA | 2000 | 2005 
AB | 1984 | 1989 
AR | 1965 | 1966 
BC | 1999 | 2000 

年度列目前存储为INT格式。我想通过一个SELECT返回的结构,像这样的数据集:

Make|StartYear|EndYear|Year 
----------------------|------ 
AA | 2000 | 2005 | 2000 
AA | 2000 | 2005 | 2001 
AA | 2000 | 2005 | 2002 
AA | 2000 | 2005 | 2003 
AA | 2000 | 2005 | 2004 
AA | 2000 | 2005 | 2005 
AB | 1984 | 1989 | 1984 
---------------------------------- 
AB | 1984 | 1989 | 1988 
AB | 1984 | 1989 | 1989 

反正是有,这可能与MySQL实现?

+1

显示您的尝试。 –

+0

你想为此做什么?我不能肯定地说,但这可能会更好地在表示层处理?我不太清楚为什么你需要在中间显示所有内容。 – AdamMc331

回答

1

在这里你走..我正在使用临时表..和SP。

CREATE DEFINER=`root`@`localhost` PROCEDURE `mytest`() 
BEGIN 


declare _make varchar(20); 
declare _startyear int; 
declare _endyear int; 
DECLARE bDone INT; 
DECLARE ioffset INT; 

DECLARE curs CURSOR FOR SELECT make, startyear, endyear FROM test.maketable; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1; 

DROP TEMPORARY TABLE IF EXISTS tmpmake; 
CREATE TEMPORARY TABLE tmpmake AS 
    SELECT make, startyear, endyear, startyear as theyear from test.maketable; 


OPEN curs; 

    SET bDone = 0; 
    REPEAT 
    FETCH curs INTO _make,_startyear, _endyear; 
    Set ioffset = 1; 
    While (_startyear + ioffset <= _endyear and bDone = 0) do 
     Insert into tmpmake values (_make,_startyear, _endyear, _startyear + ioffset); 
     Set ioffset = ioffset + 1; 
    end while; 

    UNTIL bDone END REPEAT; 

    CLOSE curs; 
    SELECT * FROM tmpmake order by 1,4; 
-- 
-- 
END 
+1

这是完美的!也从中学到了一堆新东西。谢谢! – Linnay