簡體   English   中英

在mysql中使行到列

[英]making rows to columns in mysql

我有此小時數據,我想生成報告,其中我必須每小時按產品,模式,地區分組顯示每一行的收入(抱歉,格式錯誤)

      price  product   mode             region         HOUR 

1.     0     p1        direct            reg1          1 
2.     10    p3        indirect          reg2          2 
3.     0     p2        direct            reg1          1 
4.     0     p1        indirect          reg2          2 
5.     0     p2        direct            reg5          3 
6.     0     p1        direct            reg1          3 
7.     0     p1        direct            reg2          3 
8.     0     p3        indirect          reg4          17 
9.     0     p4        direct            reg2          17 
10.    21    p1        direct            reg2          17 


        HOUR1 HOUR2 HOUR3 HOUR4 HOUR5....HOUR23 product   mode    region
  1.    0      10     1     30                  p1     direct       reg1
  2.    0      5      1     10                  p1     indirect     reg2

不幸的是,mysql沒有內置的樞軸函數,因此您需要為未知的樞軸元素集編寫一個動態sql,或者可以對已知的樞軸元素集使用最常用的樞軸生成技術,並且在您的情況下,自從您正在查看從hour1到hour23的數據,它可以像

select
sum( case when HOUR = 1 then price else 0 end) as `HOUR1`,
sum( case when HOUR = 2 then price else 0 end) as `HOUR2`,
sum( case when HOUR = 3 then price else 0 end) as `HOUR3`,
sum( case when HOUR = 4 then price else 0 end) as `HOUR4`,
sum( case when HOUR = 5 then price else 0 end) as `HOUR5`,
sum( case when HOUR = 6 then price else 0 end) as `HOUR6`,
sum( case when HOUR = 7 then price else 0 end) as `HOUR7`,
sum( case when HOUR = 8 then price else 0 end) as `HOUR8`,
sum( case when HOUR = 9 then price else 0 end) as `HOUR9`,
sum( case when HOUR = 10 then price else 0 end) as `HOUR10`,
sum( case when HOUR = 11 then price else 0 end) as `HOUR11`,
sum( case when HOUR = 12 then price else 0 end) as `HOUR12`,
sum( case when HOUR = 13 then price else 0 end) as `HOUR13`,
sum( case when HOUR = 14 then price else 0 end) as `HOUR14`,
sum( case when HOUR = 15 then price else 0 end) as `HOUR15`,
sum( case when HOUR = 16 then price else 0 end) as `HOUR16`,
sum( case when HOUR = 17 then price else 0 end) as `HOUR17`,
sum( case when HOUR = 18 then price else 0 end) as `HOUR18`,
sum( case when HOUR = 19 then price else 0 end) as `HOUR19`,
sum( case when HOUR = 20 then price else 0 end) as `HOUR20`,
sum( case when HOUR = 21 then price else 0 end) as `HOUR21`,
sum( case when HOUR = 22 then price else 0 end) as `HOUR22`,
sum( case when HOUR = 23 then price else 0 end) as `HOUR23`,
product,
mode,
region
from mytable 
group by product,mode,region;

http://sqlfiddle.com/#!9/b2e868/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM