某天,qq上一個(gè)圈子內(nèi)的網(wǎng)友發(fā)來一個(gè)求助信息 :
PropID name?? Amount
3????? 元寶?? 2
2????? 樂豆?? 3
能否用一條sql 寫成輸出,就是復(fù)制對應(yīng)Amount 的條數(shù) :
PropID name
3????? 元寶
3????? 元寶
2????? 樂豆
2????? 樂豆
2????? 樂豆
?
[注釋]:
3 元寶 2
注意, 最后一列是2,就是有2條這樣的記錄,要變成
3 元寶
3 元寶
將最后記錄條數(shù)的列去掉,直接用重復(fù)的行來表示,所以依照此例,2????? 樂豆?? 3,就要重復(fù)3條記錄,如下:
2????? 樂豆
2????? 樂豆
2????? 樂豆
?
?
研究了下,用普通的group by sum if case when之類的搞不定,得換種思路,一時(shí)hang住了,就與網(wǎng)友Mr.W說起,他提供了數(shù)字輔助表的思路。
OK,搞定了,SQL如下:
select t1.propid,t1.name from tb t1,(select 1 as num union select 2 as num union select 3 as num ) t2 where t1.amount>= t2.num order by 1;?
?
中間的,(select 1 as num union select 2 as num union select 3 as num ) t2 部分
最好你另外建一個(gè)num單列輔助表表,從1自增到N,給個(gè)幾萬就好,然后關(guān)聯(lián)查方便一些自連接的sql判斷,select貌似也沒循環(huán)生成數(shù)字的功能。如下表nums
?
看到這里的朋友,有更好的實(shí)現(xiàn)方法,請share下。
?以上就是MySQL 用數(shù)字輔助表實(shí)現(xiàn)復(fù)雜的列變行?的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.php.cn)!