SQLについて御教授願います。
↑このような結果を返すSQLはどのように書けばいいのでしょうか。
複数に分けるしか方法がないでしょうか?
このSQLを用いて、プログラム(visual studio2015で開発しています。)を介し、下の図の配置のままでエクセルに出力したいです。

回答4件
あなたの回答
tips
プレビュー
MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。
phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。
phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
0グッド
0クリップ
投稿2017/07/04 08:27
SQLについて御教授願います。
↑このような結果を返すSQLはどのように書けばいいのでしょうか。
複数に分けるしか方法がないでしょうか?
このSQLを用いて、プログラム(visual studio2015で開発しています。)を介し、下の図の配置のままでエクセルに出力したいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
縦のテーブルを横にするのをピボット(pivot)、横のテーブルを縦にするのをアンピボット(unpivot)と呼ぶので、それで検索すればいろいろ出てくると思います。
SQL
1SELECT ID, 2 名前, 3 MAX(CASE WHEN 年 = '2016/1/1' THEN 身長 END) AS `身長(2016)`, 4 MAX(CASE WHEN 年 = '2017/1/1' THEN 身長 END) AS `身長(2017)`, 5FROM テーブルA 6GROUP BY ID, 名前 7;
投稿2017/07/04 08:42
編集2017/07/04 08:48総合スコア372
0
泥臭いやり方でいいなら…
サブクエリで2016年分と2017年分に分けたものをつくります。
それをidで結合して必要な項目をselectすればok
複数の行を列にするロジックを汎用的につくるのは
難しいけど、決め打ちでやるならそうでもなかったり
投稿2017/07/04 09:01
総合スコア7468
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
まず命題についてIDと名前に正規化が必要です
SQL
1create table user_table(id int primary key,name varchar(20)); 2insert into user_table values(1,'たろう'),(2,'じろう'); 3create table data_table(y date,id int,height double,unique(y,id)); 4insert into data_table values('2016-01-01',1,140),('2016-01-01',2,150),('2017-01-01',1,142),('2017-01-01',2,153); 5
その上で、表示
SQL
1select y,t1.id,name,height from data_table as t1 2inner join user_table as t2 on t1.id=t2.id;
これを集計
SQL
1select t1.id,name 2,sum(height*(y='2016-01-01')) as h2016 3,sum(height*(y='2017-01-01')) as h2017 4 from user_table as t1 5inner join data_table as t2 on t1.id=t2.id 6group by id 7
投稿2017/07/04 08:52
総合スコア118110
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
皆様の回答を参考に、調べていると、sqlだけでなんとかしようとするのが難しいのかな?と感じました。sqlに囚われない方法を考えようと思いますm(__)m
投稿2017/07/05 06:59
総合スコア14
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。