Mysql 表联接以返回一行中的结果。

Mysql 表联接以返回一行中的结果。,mysql,pivot,Mysql,Pivot,我有两个表,需要创建一个mysql视图,将结果显示在一行中 目前我使用联接,但它将记录作为行而不是列提供给我。我试过枢轴,但没能使它工作。我需要油漆的时间,铅锤的时间和其他的一切都在一排的每项工作的其他时间 表结构如下所示: 这基本上是一个PIVOT,不幸的是MySQL没有PIVOT函数,但您可以使用聚合函数和CASE语句: select jobnum, sum(case when tasktype = 'paint' then hrs else 0 end) Paint, sum(ca

我有两个表,需要创建一个mysql视图,将结果显示在一行中

目前我使用联接,但它将记录作为行而不是列提供给我。我试过枢轴,但没能使它工作。我需要油漆的时间,铅锤的时间和其他的一切都在一排的每项工作的其他时间

表结构如下所示:

这基本上是一个PIVOT,不幸的是MySQL没有PIVOT函数,但您可以使用聚合函数和CASE语句:

select jobnum,
  sum(case when tasktype = 'paint' then hrs else 0 end) Paint,
  sum(case when tasktype = 'plumb' then hrs else 0 end) plumb,
  sum(case when tasktype not in ('paint', 'Plumb') then hrs else 0 end) Other
from tablea a
left join tableb b
  on a.id = b.tbla_id
group by jobnum

结果:

| JOBNUM | PAINT | PLUMB | OTHER |
----------------------------------
|      1 |    10 |    10 |    20 |
|      2 |    25 |     0 |     0 |

目前我使用一个连接。你能粘贴到目前为止的查询吗?我没有投反对票!事实上,我说过这篇文章对我很有用。为了扩展这一点,如果表B有另一列-包括是/否。我们如何将其纳入查询中?这不是针对你的,而是针对投票人的。和你的问题一样,这完全取决于你对结果的预期。其他建议:创建一个数据类型为TINYINT的列,并在布尔情况下使用值0或1。这将有助于在数据库中消耗尽可能少的空间和处理时间。如果您需要一个未设置的值,只需将其设置为acceptnull。
SELECT
    a.`JobNum`,
    SUM(IF(a.`TaskType`='Paint',b.`Hrs`,0)) AS 'Paint',
    SUM(IF(a.`TaskType`='Plumb',b.`Hrs`,0)) AS 'Plumb',
    SUM(IF(a.`TaskType` IN('Paint','Plumb'),0,b.`Hrs`)) AS 'Other'
FROM `tableA` a
INNER JOIN `tableB` b
ON b.`tblAid`=a.`id`
GROUP BY a.`JobNum`