Mysql 如何在SQL查询中显示多列中的所有值
我试图显示数据库中不同表中的一些信息。其中一个表格称为job_pieces。此表中有字段ID、CompanyID和PieceType。每个公司可以有许多ID和类型。我不知道每家公司有多少件。这只是一个小例子,但一些公司有近30种类型。以下是一个示例数据库: 此查询的结果如下: 我添加了行Mysql 如何在SQL查询中显示多列中的所有值,mysql,sql,mysql-workbench,multiple-columns,Mysql,Sql,Mysql Workbench,Multiple Columns,我试图显示数据库中不同表中的一些信息。其中一个表格称为job_pieces。此表中有字段ID、CompanyID和PieceType。每个公司可以有许多ID和类型。我不知道每家公司有多少件。这只是一个小例子,但一些公司有近30种类型。以下是一个示例数据库: 此查询的结果如下: 我添加了行GROUP\u CONCAT,这样您就可以看到作业的所有工件类型。 因此,在这个查询中,我需要显示一家公司拥有的所有作业和工件类型。问题在于列PieceType。正如您在第一行的图像中看到的,它只显示一种类型
GROUP\u CONCAT
,这样您就可以看到作业的所有工件类型。
因此,在这个查询中,我需要显示一家公司拥有的所有作业和工件类型。问题在于列PieceType。正如您在第一行的图像中看到的,它只显示一种类型,而应该有4种。我还希望每个PieceType都是一个单独的列,如下所示:
从我所做的搜索来看,将AllPieceTypes列拆分为每个片段的单独列似乎是一件困难的事情。那么我加入工作表是不是错了?为什么当存在更多类型时,PieceType列中只显示一种类型?如何在各自的列中显示每个分段类型?它们需要在自己的列中,因为每个公司只有一行。因此,在显示分段类型时,我需要该行继续
我在这里发现了类似的东西:
但是我不知道如何编辑我的查询。您可以采取不同的方法。但真正的问题是,你需要预先确定有多少这样的类型。SQL查询返回一组固定的行,这就是为什么
group\u concat()
很方便的原因
下面是一个返回前三种工件类型的方法的示例:
SELECT c.Name,
COUNT(distinct jn.ID) as Jobs
GROUP_CONCAT(DISTINCT jp.PieceType) as AllPieceTypes,
substring_index(GROUP_CONCAT(DISTINCT jp.PieceType ORDER BY jp.PiectType), ',', 1) as PieceType1,
substring_index(substring_index(GROUP_CONCAT(DISTINCT jp.PieceType ORDER BY jp.PiectType), ',', 2), ',', -1) as PieceType2,
substring_index(substring_index(GROUP_CONCAT(DISTINCT jp.PieceType ORDER BY jp.PiectType), ',', 3), ',', -1) as PieceType3
FROM customer c LEFT JOIN
job_new jn
ON c.JobID = jn.ID LEFT JOIN
job_pieces jp
ON jn.JobID = jp.JobID
WHERE c.Company_ID = compid
GROUP BY c.ID
(如果某些作业少于3个,则逻辑会稍微复杂一点,因为这会复制值。)这不起作用,因为无法知道每个公司有多少工件类型。它可能是3,也可能是30,你想要的是一个枢轴操作。瞧
SELECT c.Name,
COUNT(distinct jn.ID) as Jobs
GROUP_CONCAT(DISTINCT jp.PieceType) as AllPieceTypes,
substring_index(GROUP_CONCAT(DISTINCT jp.PieceType ORDER BY jp.PiectType), ',', 1) as PieceType1,
substring_index(substring_index(GROUP_CONCAT(DISTINCT jp.PieceType ORDER BY jp.PiectType), ',', 2), ',', -1) as PieceType2,
substring_index(substring_index(GROUP_CONCAT(DISTINCT jp.PieceType ORDER BY jp.PiectType), ',', 3), ',', -1) as PieceType3
FROM customer c LEFT JOIN
job_new jn
ON c.JobID = jn.ID LEFT JOIN
job_pieces jp
ON jn.JobID = jp.JobID
WHERE c.Company_ID = compid
GROUP BY c.ID