Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQL查询中显示多列中的所有值_Mysql_Sql_Mysql Workbench_Multiple Columns - Fatal编程技术网

Mysql 如何在SQL查询中显示多列中的所有值

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。正如您在第一行的图像中看到的,它只显示一种类型

我试图显示数据库中不同表中的一些信息。其中一个表格称为job_pieces。此表中有字段ID、CompanyID和PieceType。每个公司可以有许多ID和类型。我不知道每家公司有多少件。这只是一个小例子,但一些公司有近30种类型。以下是一个示例数据库:

此查询的结果如下:

我添加了行
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