表连接将结果返回到一行。

时间:2012-11-09 15:31:35

标签: mysql pivot

我有两个表,需要创建一个mysql视图,将结果放在一行。

目前我使用连接,但这会将记录显示为行而不是列。我尝试了枢轴,但无法让它工作。我需要一行中的油漆工作时间,铅锤工时和其他工作时间(其他一切都在其他工作中)。

表格结构如下:

enter image description here

2 个答案:

答案 0 :(得分:2)

这基本上是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

请参阅SQL Fiddle with Demo

结果:

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

答案 1 :(得分:-1)

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`