2017-12-06 1 views
0

各日付の列でデータをレポートする必要があります。前もって日付を指定する必要がある(つまり、表のデータから日付を検出する必要はありません)が、各列にはその日付のデータが必要です。SQL(MySQL)の日付による列内のデータのレポート方法

ソースデータが正規化されているため、各行にデータと日付があります。例えば

create table test1 (
id int primary key, 
name varchar(32), 
created datetime default current_timestamp, 
rows int 
); 

だから、test1のは、私がこのような出力を探しています

234 fred 2017-01-01 17 
235 alice 2017-01-02 32 
... 

のように行の日付を持っているかもしれません。その

NAME  2017-01-01  2017-01-02 2017-01-02 
fred   17    19   24 
alice   29    32   64 
... 

答えて

0

方法(より良い方法があるかもしれませんが、これは動作します)

select name 
    , max(case when date(created) = '2017-12-01' then rows else 0 end) as '2017-12-01' 
    , max(case when date(created) = '2017-12-02' then rows else 0 end) as '2017-12-02' 
    , max(case when date(created) = '2017-12-03' then rows else 0 end) as '2017-12-03' 
from test1 
group by name; 

createdの値を日付の右側の列に置きます。それ以外の場合は0です。 maxはゼロを除外し、group byには希望の値が表示されます。 else 0を入力しないと、NULLSが返され、NULLSはgroup byの値を圧倒し、正しく動作しません。

関連する問題