2017-02-16 4 views
1

Iはbill_noalcohol_typorigin2000ml1000mlbill_dateとして列が含まpermit_billsと命名MYSQLのテーブルを持っています。テーブルは、以下に示される:MYSQL - 一列に複数の行を選択

+---------+--------------+---------+--------+--------+-----------+ 
    | bill_no | alcohol_typ | origin | 2000ml | 1000ml | bill_date | 
    +---------+------------- + --------+--------+--------+-----------+ 
    | 2001 | s   | f  | 2 | 1 |01-02-2017 | 
    | 2001 | m   | w  | 3 | 4 |01-02-2017 | 
    +---------+--------------+---------+--------+--------+-----------+ 

Iは、それらbill_nobill_dateに基づいて単一の行に上記の表からすべての行を選択すると、そのalcohol_typと `起源に従って2000ml1000mlの列を表示します。

マイ出力テーブルは次のようにする必要があります

+---------+--------------+-------------+------------+------------+-----------+ 
    | bill_no | s_f_2000ml | s_f_1000ml | m_w_2000ml | m_w_1000ml | bill_date | 
    +---------+------------- + ------------+------------+------------+-----------+ 
    | 2001 |  2  |  1  |  3  |  4  |01-02-2017 | 
    +---------+--------------+-------------+------------+------------+-----------+ 
+0

は、あなたはそれが私だった場合、私はこの種のものを処理したいここhttp://stackoverflow.com/questions/7674786/mysql-pivot-table – Kostis

+0

見てみましょう... PIVOTを必要としますアプリケーションコード - はるかに拡張性と柔軟性。 – Strawberry

+0

I.e. GROUP BYを実行し、条件式を使用して条件付き集計を行います。 – jarlh

答えて

0

この(ピボット)クエリ試してみてください -

SELECT 
    bill_no, 
    MAX(IF(alcohol_typ = 's' AND origin = 'f', `2000ml`, NULL)) AS s_f_2000ml, 
    MAX(IF(alcohol_typ = 's' AND origin = 'f', `1000ml`, NULL)) AS s_f_1000ml, 
    MAX(IF(alcohol_typ = 'm' AND origin = 'w', `2000ml`, NULL)) AS m_w_2000ml, 
    MAX(IF(alcohol_typ = 'm' AND origin = 'w', `1000ml`, NULL)) AS m_w_1000ml, 
    bill_date 
FROM permit_bills 
    GROUP BY bill_no, bill_date 
関連する問題