按foreach行分组时的Mysql案例

按foreach行分组时的Mysql案例,mysql,group-by,case,Mysql,Group By,Case,数据库产品\u api: SHOPID PRODUCT_NAME PRODUCT_CODE 1 prod_name1 SKU1 2 prod_name2 SKU1 3 prod_name3 SKU1 我想按产品代码分组,并获得每个SHOPID的产品名称 我的代码: SELECT case when SHOPID = 1 then PRODUCT_NAME end as shopid1, case when SHOPID

数据库产品\u api:

SHOPID PRODUCT_NAME PRODUCT_CODE  
1      prod_name1     SKU1  
2      prod_name2     SKU1  
3      prod_name3     SKU1  
我想按产品代码分组,并获得每个SHOPID的产品名称
我的代码:

SELECT case when SHOPID = 1 then PRODUCT_NAME end as shopid1,  
case when SHOPID = 2 then PRODUCT_NAME end as shopid2,  
case when SHOPID = 3 then PRODUCT_NAME end as shopid3,PRODUCT_CODE  
FROM products_api   
GROUP BY PRODUCT_CODE
结果应为一行,带有:

shopid1    shopid2    shopid3    PRODUCT_CODE  
prod_name1 prod_name2 prod_name3 SKU1 
但结果是一行中有:

shopid1    shopid2    shopid3    PRODUCT_CODE  
prod_name1                       SKU1 

谢谢。

你几乎让它工作了。只需在
CASE
表达式周围添加
MAX
聚合函数:

SELECT MAX(case when SHOPID = 1 then PRODUCT_NAME end) as shopid1,  
       MAX(case when SHOPID = 2 then PRODUCT_NAME end) as shopid2,  
       MAX(case when SHOPID = 3 then PRODUCT_NAME end) as shopid3,
       PRODUCT_CODE  
FROM products_api   
GROUP BY PRODUCT_CODE

我认为
组\u CONCAT
更好,因为名称是字符串。@AlinPurcaru这取决于要求。OP明确表示他/她希望每个
SHOPID
值都有一个单独的列。@GrempelsGabriel也可以使用
MIN
。我们只需要一个聚合函数,它将对
VARCHAR
进行操作,并返回字段值。