【发布时间】:2015-07-07 08:41:36
【问题描述】:
我正在尝试创建一个显示来自数据库的不同信息的报告。在我的报告中,我需要显示表 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
【问题讨论】:
-
一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。
-
您只是在寻找
GROUP_CONCAT(DISTINCT jp.PieceType)吗? -
@jarlh 所以我需要一个 GROUP BY 来表示片段类型?
-
我还没有阅读整个问题,但我会尝试 GROUP BY c.Name、jn.CompanyID、jp.PieceType。也许还有 jn.JobNo.
-
@ThorstenKettner 谢谢你的作品