-1

したがって、行ごとに出力する基本的なmySQLselectクエリからのこのデータがあります。

-基本的なmySQL選択クエリ

ID---------DATE---------POINT1---POINT2------TOTAL
1----2013-01-03----------10----------16---------26
2----2013-01-03----------11----------22---------33
3----2013-01-03----------15----------7----------22
1----2013-01-04----------20----------4----------24
2----2013-01-04----------8-----------32---------40
3----2013-01-04----------16----------12---------28
1----2013-01-05----------12----------17---------29
2----2013-01-05----------2-----------29---------31
3----2013-01-05----------8-----------10---------18

私がやりたいのは、データを列の日付と行のIDで、月ごとのように動的に並べ替えることです。これが目的の出力です。

/----------/2013-01-03/---------/2013-01-04/------/2013-01-05/------/
ID--Point 1-Point2-Total-Point 1-Point2-Total-Point 1-Point2-Total
1----10-------16-----26-----20-------4-----24----12-----17------29
2----11-------22-----33------8------32-----40-----2-----29------31
3----15-------7------22-----16------12-----28-----8-----10------18

次に、それをcsvまたはExcelに出力します。どうすればこれを達成できるのか、ちょっと迷っています。誰かが私を導くことができればそれは素晴らしいことです。ありがとう

4

1 に答える 1

0

列のデータのピボットを解除してから、ピボットを実行してすべてのデータを列に戻すことができます。

select id,
  sum(case when date='2013-01-03' and col='Point1' then value end) Point1_01032013,
  sum(case when date='2013-01-03' and col='Point2' then value end) Point2_01032013,
  sum(case when date='2013-01-03' and col='Total' then value end) Total_01032013,
  sum(case when date='2013-01-04' and col='Point1' then value end) Point1_01042013,
  sum(case when date='2013-01-04' and col='Point2' then value end) Point2_01042013,
  sum(case when date='2013-01-04' and col='Total' then value end) Total_01042013,
  sum(case when date='2013-01-05' and col='Point1' then value end) Point1_01052013,
  sum(case when date='2013-01-05' and col='Point2' then value end) Point2_01052013,
  sum(case when date='2013-01-05' and col='Total' then value end) Total_01052013
from
(
  select id, date_format(date, '%Y-%m-%d') date, 'Point1' col, Point1 as value
  from yourtable
  union all
  select id, date_format(date, '%Y-%m-%d') date, 'Point2' col, Point2
  from yourtable
  union all
  select id, date_format(date, '%Y-%m-%d') date, 'Total' col, Total
  from yourtable
) src
group by id;

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

| ID | POINT1_01032013 | POINT2_01032013 | TOTAL_01032013 | POINT1_01042013 | POINT2_01042013 | TOTAL_01042013 | POINT1_01052013 | POINT2_01052013 | TOTAL_01052013 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
|  1 |              10 |              16 |             26 |              20 |               4 |             24 |              12 |              17 |             29 |
|  2 |              11 |              22 |             33 |               8 |              32 |             40 |               2 |              29 |             31 |
|  3 |              15 |               7 |             22 |              16 |              12 |             28 |               8 |              10 |             18 |
于 2013-01-17T01:16:24.073 に答える