2016-04-27 49 views
0

我有一個名爲sample的數據庫表。如何編寫同一表n的子查詢mysql

create table sample(name varchar(50), amount int(10)); 

insert into sample(name,amount) values('rose',1000); 
insert into sample(name,amount) values('jhon',2000); 
insert into sample(name,amount) values('rose',2000); 
insert into sample(name,amount) values('rahel',1000); 
insert into sample(name,amount) values('rose',3000); 

我想要的輸出,

+----------+----------+---------------+-----------+ 
+---rose---+--1000----+-------2000----+---3000----+ 
+---jhon---+--2000----+---------------+-----------+ 
+---rahel--+--1000----+---------------+-----------+ 

如何寫得到的輸出上面喜歡的查詢?

+1

讓我猜。你不知道每個'name'的'amount'的數量是多少。第二,它僅用於表示層。無論如何搜索'行到列'。 – lad2025

+0

因爲我認爲你沒有。的列是動態的嗎?如果'rose' count是4,那麼將會有amount1,amount2,amount3,amount4 ........我是對嗎? –

+0

是的..沒有列是動態的@jordan – Rehan

回答

0

你需要使用GROUP_CONCAT(),下面的查詢會給你你想要轉動的價值觀輸出

select name, group_concat(amount) from sample 
group by name 
+0

不,Group_concat不會工作,因爲group_concat動態地將它們轉換爲單個列而不是多個列 –

+0

@Jordan,結果存在多列與逗號分隔值,你總是可以根據''分割, –

+0

看問題及其預期結果 –

0

,但你沒有能進行旋轉列。您可以使用變量分配一個數字,然後使用條件聚合。假設你想要更多的三列:

select name, 
     max(case when rn = 1 then amount end) as amount1, 
     max(case when rn = 2 then amount end) as amount2, 
     max(case when rn = 3 then amount end) as amount3 
from (select s.*, 
      (@rn := if(@n = name, @rn + 1, 
         if(@n := name, 1, 1) 
         ) 
      ) as rn 
     from sample s cross join 
      (select @n := '', @rn := 0) params 
     order by name 
    ) s 
group by name; 
0

您需要使用GROUP_CONCAT()功能和您的查詢將低於一提:

選擇名稱,GROUP_CONCAT(量)從樣品 組的名字;

你會得到你的慾望輸出。

相關問題