如何将列分组到包含数据的字段?

时间:2015-12-01 08:13:53

标签: mysql sql

大家好日子:

在我的查询中,当我使用时:

CONCAT(GROUP_CONCAT(wu_paqueteproducto.extra1),' ',GROUP_CONCAT(wu_paqueteproducto.producto)) as elproducto

我得到类似的东西

+--------+---------+----+---------------------------------------------+
| poliza |   cct   | // |            elproducto                       |
+--------+---------+----+---------------------------------------------+
|   0001 | kjjk565 | // | 1,2,2,6,1 pr001,pr002,pr003,pr004,pr005     |
+--------+---------+----+---------------------------------------------+

有没有办法让它像这样?

+--------+---------+----+---------------------------------------------+
| poliza |   cct   | // |            elproducto                       |
+--------+---------+----+---------------------------------------------+
|   0001 | kjjk565 | // | 1 pr001, 2 pr002, 2 pr003, 6 pr004, 1 pr005 |
+--------+---------+----+---------------------------------------------+

表wu_paqueteproducto有这些数据:

| ids  | extra1   | producto |
+------+----------+----------+
| 0001 |        1 | pr001    |
| 0002 |        2 | pr002    |
| 0003 |        2 | pr003    |
| 0004 |        6 | pr004    |
| 0005 |        1 | pr005    |
+------+----------+----------+

这是我的完整查询

SELECT 
wu_polizas.poliza,
wu_polizas.cct,
wu_polizas.paquete,  
wu_escuelas.director,
wu_escuelas.localidad,
wu_escuelas.nombre_mun,
wu_escuelas.nombre,
wu_facturashijo.empresa,
wu_bancos.banco as nombrebanco,

CONCAT(GROUP_CONCAT(wu_paqueteproducto.extra1),' ',GROUP_CONCAT(wu_paqueteproducto.producto)) as elproducto

FROM 
wu_polizas  
INNER JOIN wu_escuelas ON (wu_polizas.cct=wu_escuelas.cct)
INNER JOIN wu_facturashijo ON (wu_polizas.factura=wu_facturashijo.clave)
INNER JOIN wu_bancos ON (wu_polizas.banco=wu_bancos.ids)
INNER JOIN wu_paqueteproducto ON (wu_polizas.paquete=wu_paqueteproducto.paquete)


WHERE
wu_polizas.factura=002

GROUP BY
poliza

ORDER BY  
poliza

3 个答案:

答案 0 :(得分:0)

CONCAT放在GROUP_CONCAT内而不是相反:

GROUP_CONCAT(CONCAT(wu_paqueteproducto.extra1, ' ', wu_paqueteproducto.producto)) AS elproducto

答案 1 :(得分:0)

我在SQL Fiddle上写了一个解决方案,而不是可以轻松翻译成您的查询:

MySQL 5.6架构设置

create table t ( a char(1), b char(1),  i int);

insert into t values 
( '1', 'a', 1 ),
( '2', 'b', 1 ),
('8', 'x', 2),
('9', 'y', 2);

<强>查询

select GROUP_CONCAT( CONCAT_WS(' ', a, b ))
from t
group by i

<强> Results

| GROUP_CONCAT( CONCAT_WS(' ', a, b )) |
|--------------------------------------|
|                              1 a,2 b |
|                              8 x,9 y |

你是新手,记得你应该学习to ask a good question。仔细阅读:

  

How to create a Minimal, Complete, and Verifiable example

答案 2 :(得分:0)

试试这个:

SELECT 
wu_polizas.poliza,
wu_polizas.cct,
wu_polizas.paquete,  
wu_escuelas.director,
wu_escuelas.localidad,
wu_escuelas.nombre_mun,
wu_escuelas.nombre,
wu_facturashijo.empresa,
wu_bancos.banco as nombrebanco,
GROUP_CONCAT(wu_paq.custom) as elproducto

FROM 
wu_polizas  
INNER JOIN wu_escuelas ON (wu_polizas.cct=wu_escuelas.cct)
INNER JOIN wu_facturashijo ON (wu_polizas.factura=wu_facturashijo.clave)
INNER JOIN wu_bancos ON (wu_polizas.banco=wu_bancos.ids)
INNER JOIN (SELECT *, CONCAT(extra1, ' ', producto) AS custom FROM wu_paqueteproducto) AS wu_paq ON (wu_polizas.paquete=wu_paq.paquete)


WHERE
wu_polizas.factura=002

GROUP BY
poliza

ORDER BY  
poliza