質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

1028閲覧

MySQL 横並データを縦並びで出力する方法が知りたいです。

marshmallowy

総合スコア204

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/06/29 10:12

###前提・実現したいこと
お世話になります。
日毎に売上を集計してます。
横並データを縦並びで出力したいです。

よろしければ、やり方を教えていただけませんでしょうか?

横並び
イメージ説明

縦並び
イメージ説明

###該当のソースコード

SQL

1SELECT 2 IFNULL(R.point_of_sale, '') as '販売場所', 3 IFNULL(R.payment_method, '') as '支払方法', 4 ADDDATE('2017-05-01', D.number) as '支払日', 5 IFNULL(Sum(R.selling_price), 0) as '販売金額' 6FROM 7 vw_digits as D 8LEFT JOIN 9 vw_result R 10ON 11 ADDDATE('2017-05-01', D.number) = DATE(R.payment_confirm) 12WHERE 13 ADDDATE('2017-05-01', D.number) BETWEEN '2017-05-01' AND '2017-05-31' 14GROUP BY 15 R.payment_method, 16 ADDDATE('2017-05-01', D.number) 17ORDER BY 18 D.number 19ASC;

###補足情報(言語/FW/ツール等のバージョンなど)
MySQL 5.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoyan

2017/06/29 10:28

1つのソースコードかつSQLに限定しなければならないのでしょうか?
marshmallowy

2017/06/29 10:33

やり方にこだわりはありません。
marshmallowy

2017/06/29 10:35

ただ、エクセルなどを使うことは考えておりません。
yambejp

2017/06/29 11:55 編集

元データを画像で貼っても検証は難しいですね 店舗について現金以外すべてクレジットなのでしょうか? 国内・海外通販のクレジットは銀行振込・代引き・paypalに振り分けるのでしょうか? 送料はクレジットなのでしょうか? 全体的に正規化していないのでしょうか?
guest

回答1

0

ベストアンサー

一応サンプルデータから結果がどうつながっているかわかりませんが
こんな感じで

  • 元データ

SQL

1create table tbl(big_cate varchar(20),small_cate varchar(20),d date,price int); 2insert into tbl values 3('国内','代引','2017-05-01',600), 4('店舗','現金','2017-05-01',35000), 5('国内','クレ','2017-05-01',168000), 6('国内','銀行','2017-05-01',136320), 7('店舗','クレ','2017-05-01',85800), 8('国内','代引','2017-05-01',50500), 9('国内','クレ','2017-05-01',29000), 10('国内','代引','2017-05-01',700), 11('国内','代引','2017-05-02',22000), 12('店舗','現金','2017-05-02',123856), 13('国内','クレ','2017-05-02',305140), 14('国内','銀行','2017-05-02',63000), 15('店舗','クレ','2017-05-02',86040), 16('海外','クレ','2017-05-02',7899), 17('店舗','クレ','2017-05-03',51481), 18('店舗','現金','2017-05-03',37200), 19('海外','クレ','2017-05-03',8100), 20('店舗','クレ','2017-05-03',7000), 21('国内','クレ','2017-05-03',39000), 22('海外','クレ','2017-05-03',47600); 23
  • 集計

SQL

1select d 2,sum(price*(small_cate='現金')*(big_cate='店舗')) as 現金 3,sum(price*(small_cate='クレ')*(big_cate='店舗')) as クレ 4,sum(price*(small_cate='銀行')*(big_cate='国内')) as 銀行 5,sum(price*(small_cate='代引')*(big_cate='国内')) as 代引 6,sum(price*(small_cate='銀行')*(big_cate='海外')) as 銀行 7,sum(price*(small_cate='クレ')*(big_cate='海外')) as クレ 8from tbl 9group by d 10

投稿2017/06/29 12:24

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marshmallowy

2017/06/30 03:31

支払方法の上に店舗、通販(国内)、通販(海外)などを出力するにはどうすればよかったでしょうか。 ご確認の程、よろしくお願い申し上げます。
yambejp

2017/06/30 03:36

>店舗、通販(国内)、通販(海外)などを出力するには SQLはテーブルを書くツールじゃないのでできません 例示した参考のas以降を調整してそれっぽく検索し、 受け取った側で表記を調整することです たとえばas 国内:現金、as 国内:クレのような書き方
marshmallowy

2017/06/30 04:01

> SQLはテーブルを書くツールじゃないのでできません > 例示した参考のas以降を調整してそれっぽく検索し、 > 受け取った側で表記を調整することです > たとえばas 国内:現金、as 国内:クレのような書き方 やはり、実現できないですよね ですが、回答して頂いた内容に満足しております。 この度は、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問