2015-12-21 70 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