簡體   English   中英

mysql在一個結果行第一表中有多行

[英]mysql multiple rows in one result row one table

我有一個表,如下所示:

+ ------- + -----------+ ------------ + --------- + ---------- +
    | Info_Id | category   | EAN          | Info_Type | Info_Value |
    + ------- + -----------+ ------------ + --------- + ---------- +
    | 1       | 1          | 0123456789   | brand     | brand1     |
    | 2       | 1          | 0123456789   | type      | type1      |
    | 3       | 1          | 0123456789   | price     | 0.00       |
    | 4       | 2          | 9876543210   | brand     | brand6     |
    | 5       | 2          | 9876543210   | type      | type3      |
    | 6       | 2          | 9876543210   | price     | 15.00      |
    | 7       | 2          | 6548214656   | brand     | brand34    |
    | 8       | 2          | 6548214656   | type      | type1      |
    | 9       | 2          | 6548214656   | price     | 99.00      |
    | 10      | 3          | 245511411241 | brand     | brand324   |
    | 11      | 3          | 245511411241 | type      | type1      |
    | 12      | 3          | 245511411241 | price     | 98.00      |
    + ------- + -----------+ ------------ + --------- + ---------- +

現在,我正在尋找創建以下輸出的查詢:

+ ------------ + ---------- + --------- + ---------- + ----------+
    | EAN          | category   | brand     | type       | price     |
    + ------------ + ---------- + --------- + ---------- + ----------+
    | 0123456789   | 1          | brand1    | type1      | 0.00      |
    | 9876543210   | 2          | brand6    | type3      | 15.00     |
    | 6548214656   | 2          | brand34   | type1      | 99.00     |
    | etc.         | etc.       | etc.      | etc.       | etc.      |
    + ------------ + ---------- + --------- + ---------- + --------- +

我有以下內容,但這似乎不起作用:

SELECT ean,
           GROUP_CONCAT(Info_Type)    AS Info_Type,
           GROUP_CONCAT(Info_Value) AS Info_Value
    FROM tablename WHERE category=2
    GROUP BY EAN

但是,這為我提供了類似的東西:

+ ------------ + ---------------- + ------------------- + 
    | EAN          | Info_Type        | Info_Value          | 
    + ------------ + ---------------- + ------------------- +
    | 0123456789   | brand,type,price | brand1,type1,0.00   |
    | 9876543210   | brand,type,price | brand6,type3,15.00  |
    | 6548214656   | brand,type,price | brand34,type1,99.00 |
    | etc.         | etc.             | etc.                |
    + ------------ + ---------------- + ------------------- +

我該如何正確地做呢?

我認為您只需要條件聚合:

select ean, category,
       max(case when info_type = 'brand' then info_value end) as brand,
       max(case when info_type = 'type' then info_value end) as type,
       max(case when info_type = 'price' then info_value end) as price
from t
where category = 2
group by ean, category;

您必須像這樣修改每個GROUP_CONCAT

SELECT ean,
  GROUP_CONCAT(IF(Info_Type = 'type' ,Info_Type,''))    AS 'type',
  GROUP_CONCAT(IF(Info_Type = 'price' ,Info_Type,''))    AS 'price'
FROM tablename WHERE category=2
GROUP BY EAN;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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