最近遇到一個查詢需求,就是select多列時如何顯示成一列--舉例說就是假如表是3列2行:
1 2 3
4 5 6
如何讓查詢結果變成一列多行:
1
2
3
4
5
6
首先創建測試表
create table test(c1 int,c2 int,c3 int);
insert into test values(1,2,3),(4,5,6),(7,8,9),(10,11,12);
方法一:用union
select c1 from test union select c2 from test union select c3 from test;
這種方法最易理解,就是查詢三次,一次一個列,然後合並;但缺點就是掃描表3次
方法二:插入換行符
mysql -Bse "select concat(c1,'@@',c2,'@@',c3)from test ;" | sed 's/@@/\n/g'
這種方法也較易理解,字段與字段之間插入換行符;相比第一種方法優點是只需訪問表一次,缺點是需要借助外部文本處理工具
方法三:用case
select case when rownum=1 then c1 when rownum=2 then c2 when rownum=3 then c3 else '' end from test,(SELECT @rownum:=@rownum+1 AS rownum FROM (SELECT @rownum:=0) r, test) b;
這種方法是我同事shengkaisu想的,較難理解:生成行號rownum,然後生成的行號表和舊表做笛卡爾積,rownum為1就選第一列,rownum為2就選第二列...........