我想不出更好的方式来提出这个问题,但是这里有:
我有2张桌子。第一个是标签打印作业的项目表。我们称之为pj_items
列只是:job_id, part_num and qty
第二个表是一个名为PartFinishes
的完成列表,只有两列:PartNumber and FinishId
当我想检索标签打印机的信息时,我使用:
select pj_items.part_num, pj_items.qty, PartFinishes.FinishId from pj_items
join PartFinishes on PartFinishes.PartNumber = pj_items.part_num
where job_id = 1
此查询工作正常,并在每个部分只有一个完成时为我提供正确的结果。问题是当零件上有两个或更多的表面处理时。
例如:部分99401326
有2个完成。在我的pj_items
表上,我有一行用于该部分,因此我可以打印一个标签。当我使用此查询时,它会为该部分返回2行,每行都有不同的FinishId
,不幸的是会导致打印2个标签。我需要在一行中完成这两个饰面,因为我只想要打印一个标有两个FinishId
的标签。
我有一个类似的查询,它将结尾作为新列返回(f1,f2,f3
)但是在给定的示例中仍会返回2行,并在第一行中定义f1
并f1
在第二行中为null,在第二行中定义为f2
。
如何将其划分为一行?
希望这有道理,任何人都有任何建议吗?
如果您需要更多信息,请与我们联系。
谢谢!
修改
pj_items
表可能有重复的条目,我需要将它们保存为单独的行。我只需要将每个部件的所有饰面都放在一行中,并且各自有一部分。
示例
以下是pj_items表的示例:
以下是PartFinishes
表中的相关信息:
以下是使用原始查询的结果:
我在结果中需要的是两行99401326
是一行,其中包含该行中的两个完成,同时保留99401077
的两个单独行,因为我想要2个标签
答案 0 :(得分:2)
您可以使用GROUP_CONCAT将给定零件的所有完成ID合并为一列。
SELECT pj_items.part_num,
pj_items.qty,
GROUP_CONCAT(PartFinishes.FinishId) as FinishIds
FROM pj_items
JOIN PartFinishes
ON PartFinishes.PartNumber = pj_items.part_num
WHERE job_id = 1
GROUP BY PartFinishes.PartNumber
@comment: 但是,如果要保持pj_items中的行分开,则需要加入已按PartNumber分组的PartFinishes:
SELECT pj_items.part_num,
pj_items.qty,
FinishesGrouped.FinishIds
FROM pj_items
JOIN
( SELECT PartNumber, GROUP_CONCAT(FinishId) as FinishIds
FROM PartFinishes
GROUP BY PartNumber ) FinishesGrouped
ON
pj_items.part_num = FinishesGrouped.PartNumber