Pythonスクリプトの作成に着手する前に、MySQLだけで結果が得られるかどうかを確認したいと思います。
私は製品のリストを持っています:
PID Product
-----------
1 AAA
2 ABC
3 BAC
4 CAB
5 CBA
これらの製品を数回注文している会社のリストがあります:
CID PID
-------
1 1
2 3
1 5
3 2
1 1
2 3
望ましい結果:
CID AAA ABC BAC CAB CAB CBA
---------------------------
1 Y Y
2 Y
3 Y
Pythonでこれをどのように行うのですか?
- 列を含む一時テーブルを作成します(CID AAA ABC BAC CAB CAB CBA)
- 2つのループを実行し、目的の列が一致したときに目的のテーブルを更新します。
MySQLのみのソリューションが存在するかどうかを知りたいだけです。
ps:これは単なるサンプルであり、実際の問題には100の製品と1000の企業があります。Excelで転置を行って100個の製品の一時テーブルを作成し、それをMySQLテーブルに変換しました。
以下は私が最終的に頼ったアプローチです。フィードバックをありがとう。
########### Python script to generate the MySQL query ##############
#MySQL Connection String Goes here#
#Generate MySQL 'CASE' logic
cursor = db.cursor()
if __name__ == '__main__':
cursor.execute("select PID, Product from products")
productlist = cursor.fetchall()
for product in productlist:
print ("max(case when PID = %s then 'Y' else '' end) as `%s`,") % (product[0], product[1])
db.close()
ニックによって提案された形式で生成されたクエリを使用します。
select cid,
max(case when pid = 1 then 'Y' else '' end) as AAA,
max(case when pid = 2 then 'Y' else '' end) as ABC,
max(case when pid = 3 then 'Y' else '' end) as BAC,
max(case when pid = 4 then 'Y' else '' end) as CAB,
max(case when pid = 5 then 'Y' else '' end) as CBA
from companies
group by cid