我正在尝试创建一个报告,该报告将显示数据库中的不同信息。在我的报告中,我需要显示表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
答案 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。