![](/img/trans.png)
[英]MySQL join multiple rows from one table while selecting only a single row from the others
[英]MYSQL - Selecting multiple rows in a single row
我有一個表MYSQL
命名為permit_bills
包含列作為bill_no
, alcohol_typ
, origin
, 2000ml
, 1000ml
, bill_date
。 表如下所示:
+---------+--------------+---------+--------+--------+-----------+
| 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 |
+---------+--------------+---------+--------+--------+-----------+
我想選擇從上表中的所有行基於其單列bill_no
和bill_date
並希望顯示的列2000ml
和1000ml
按他們alcohol_typ
和'起源。
我的輸出表必須是這樣的:
+---------+--------------+-------------+------------+------------+-----------+
| bill_no | s_f_2000ml | s_f_1000ml | m_w_2000ml | m_w_1000ml | bill_date |
+---------+------------- + ------------+------------+------------+-----------+
| 2001 | 2 | 1 | 3 | 4 |01-02-2017 |
+---------+--------------+-------------+------------+------------+-----------+
試試這個(數據透視)查詢 -
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
你確定你的輸出表需要看起來像那樣嗎?
您可以使用GROUP_CONCAT函數,這有時是一個非常有用的工具。 您需要在應用程序中拆分或分解這些值,但這可能就是您所需要的。
https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.