我有通過使用bui的存儲過程完成此操作裝上我的查詢,這將允許你有很多的order_id列。我假設你正在使用MySQL。
這顯示瞭如何輸出order_id
,你也可以做同樣的輸出brand
。
The sqlfiddle
創建表事件和數據
create table Customer (customer_id int);
create table Orders (customer_id int, order_id int, brand char, order_date date);
insert into customer values(1);
insert into customer values(2);
insert into customer values(3);
insert into orders values(1, 101,'A', '2010-02-01');
insert into orders values(1, 102,'B', '2010-02-05');
insert into orders values(1, 103,'A', '2014-01-06');
insert into orders values(2, 204,'B', '2013-01-02');
insert into orders values(2, 205,'D', '2013-02-02');
insert into orders values(3, 306,'A', '2013-03-07');
insert into orders values(3, 307,'B', '2013-04-07');
insert into orders values(3, 308,'C', '2013-05-07');
insert into orders values(3, 309,'D', '2013-07-07');
insert into orders values(3, 310,'E', '2013-11-07');
insert into orders values(3, 311,'F', '2013-11-07');
創建函數BuildQuery對於()
create function buildQuery() returns varchar(4000)
not deterministic
reads sql data
begin
-- variables
declare query varchar(4000);
declare maxcols int;
declare counter int;
-- initialize
set query = '';
set maxcols = 0;
set counter = 0;
-- get the max amount of columns
select count(distinct order_id) as maxorders into maxcols
from Orders
group by customer_id
order by maxorders desc limit 1;
-- build the query
while counter < maxcols do
set counter = counter + 1;
set query=concat(query,',replace(substring(substring_index(group_concat(order_id), '','',', counter,'),length(substring_index(group_concat(order_id),'','',', counter,'-1)) + 1),'','','''') as order' ,counter);
end while;
-- return
return query;
end//
執行該功能
set @q = buildQuery();
set @q = concat('select customer_id ', @q, '
from Orders
group by customer_id');
prepare s from @q;
execute s;
deallocate prepare s;
運行結果
SqlFiddle
The sqlfiddle
你應該能夠在這裏找到答案:http://stackoverflow.com/questions/ 7674786/mysql-pivot-table – Mike 2014-10-08 13:33:07
如果此人有6個ord,該怎麼辦ERS? – 2014-10-08 13:44:54
您正在使用哪些DBMS? Postgres的?甲骨文? – 2015-03-18 08:36:56