簡體   English   中英

MYSQL - 在一行中選擇多行

[英]MYSQL - Selecting multiple rows in a single row

我有一個表MYSQL命名為permit_bills包含列作為bill_noalcohol_typorigin2000ml1000mlbill_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_nobill_date並希望顯示的列2000ml1000ml按他們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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM