在一列中显示数据库中的多个值

时间:2015-07-07 08:41:37

标签: mysql sql select

我正在尝试创建一个报告,该报告将显示数据库中的不同信息。在我的报告中,我需要显示表job_pieces中的PieceType列。但是每个公司可能有不同数量的PieceTypes,例如,公司135只有PLT类型,但公司99有PLT,CASE,CTN等

在我的报告中,我希望像列一样显示每个PieceType。因为如果我只是将jp.PieceType放入选择中,那么它将只显示一个值,即使可能有5个不同的部分。 像:

PieceType
CTN

但它应该是这样的:

PieceType
CTN       CASE    PLT

我的SQL查询:

SELECT  c.Name,
        jn.CompanyID,
        COUNT(distinct jn.ID) as Jobs,
        SUM(jn.ActualWeight) as GrossWt,
        (select COUNT(job_debriefs.ID) from job_debriefs WHERE JobID = jn.JobNo) as Debriefs,
        sum(jn.OutTurn) as Outturn,
        jp.PieceType
FROM customer c
LEFT JOIN job_Address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID
LEFT JOIN job_new jn ON ja.JobID = jn.ID
LEFT JOIN job_pieces jp ON ja.JobID = jp.ID
WHERE c.Company_ID = ?compID
GROUP BY c.ID

所以你可以从SQL查询中看到我有列Name,CompanyID,Jobs等。我希望片段类型显示在行中,就像列一样,所以在Outturn之后它可能是PLT,CASE等取决于公司。我需要显示每家公司的所有PieceType值,但我不知道每家公司有多少。现在我的sql查询只显示一个PieceType

1 个答案:

答案 0 :(得分:1)

在MySQL中将来自不同行的值作为连接字符串的聚合函数是GROUP_CONCAT。

SELECT  c.Name,
        ...
        GROUP_CONCAT(DISTINCT jp.PieceType)
FROM customer c
...
GROUP BY c.ID;

您还可以指定分隔符和order by子句。更多信息:dev.mysql.com/...function_group-concat

相关问题