2017-09-26 122 views
0

我有一個數據庫表(return_period),具有記錄的MySQL數據透視表

id ReturnPeriod Value Date 
1 10    10X  11/1/2012 
2 20    20x  11/1/2012 
3 30    30x  11/1/2012 
4 10    10xx 12/1/2013 
5 20    20xx 12/1/2013 
6 30    30y  1/1/2015 
7 30    303  1/1/2015 

,並預期輸出表如下圖所示:

Date  Rp10_Value Rp20_Value Rp30_Value 
11/1/2012 10x   20x   30x 
12/1/2013 10XX   20XX 
1/1/2015        30y 
1/1/2015        303 

我想根據日期記錄(要多記錄)。是否有辦法我可以寫這種類型的要求查詢。謝謝

+2

純代碼編寫請求是題外話堆棧溢出 - 我們期望在這裏 問題涉及到具體* *編程問題 - 但我們 會很高興幫助你自己寫!告訴我們 [你試過的東西](https://stackoverflow.com/help/how-to-ask),以及你卡在哪裏。 這也將幫助我們更好地回答你的問題。 – glennsl

回答

0

這是一個關鍵。在MySQL中,你可以使用條件彙總:

select rp.date, 
     max(case when returnperiod = 10 then value end) as rp10_value, 
     . . . 
from return_period rp 
group by rp.date; 

編輯:

我看你有沒有重複。同樣的概念適用,但你需要包含序列號:

select rp.date, 
     max(case when returnperiod = 10 then value end) as rp10_value, 
     . . . 
from (select rp.*, 
      row_number() over (partition by date, returnperiod order by date) as seqnum 
     from return_period rp 
    ) rp 
group by rp.date, seqnum; 
+0

謝謝你的幫助,但我不是瞄準最大價值。我想要所有的價值。 –

+0

@srividyabommineni。 。 。很容易錯過你的問題。這也很容易使用窗口函數來處理。 –

0
select date, 
case when rp=10 then value else null end as Rp10_Value, 
case when rp=10 then value else null end as Rp20_Value, 
case when rp=10 then value else null end as Rp30_Value 

from 
(
SELECT date, value, ReturnPeriod 
FROM Table2 where ReturnPeriod=10 
union all 
SELECT date, value, ReturnPeriod 
FROM Table2 where ReturnPeriod=20 
union all 
SELECT date, value, ReturnPeriod 
FROM Table2 where ReturnPeriod=30 
) ; 
+0

似乎得到了我所有的值,但該表看起來像這樣一些事情: –

+0

它似乎得到了我所有的值,但該表看起來有些這樣的事\t日期\t Rp10_Value \t Rp20_Value \t Rp30_Value \t 11/1/2012 \t \t 10倍空\t空 \t \t 2012年11月1日10XX \t \t空空 \t \t 2012年11月1日空\t \t 20倍空 \t \t 2013年12月1日空\t 20XX \t空 \t 1/1/2015 \t空\t空\t 30Y \t 1/1/2015 \t空\t空\t 303 –