如何在mysql中动态地将行转换为列

如何在mysql中动态地将行转换为列,mysql,inner-join,Mysql,Inner Join,我们正在尝试将行转换为列,以便按行计数显示 给定一个调查详细信息表,如下所示 给定一个车辆类别表,如下所示 如何将行转换为列以获得计数 我想得到的结果是 我们已尝试在此表上联接,但无法将行转换为列标题 select s.date,s.vehicle_id,v.category_name,count(s.vehicle_id) as vehicle_count from survey_details s inner join vehicle_category v on s.vehicle_i

我们正在尝试将行转换为列,以便按行计数显示

给定一个调查详细信息表,如下所示

给定一个车辆类别表,如下所示

如何将行转换为列以获得计数

我想得到的结果是

我们已尝试在此表上联接,但无法将行转换为列标题

select s.date,s.vehicle_id,v.category_name,count(s.vehicle_id) as vehicle_count from survey_details s inner join vehicle_category v on s.vehicle_id=v.vehicle_id group by s.vehicle_id;
试试这个:

SELECT C.Period,
  SUM(C.Bike) Bike,
  SUM(C.Car) Car,
  SUM(C.Truck) Truck,
  SUM(C.Total) Total
FROM 
  (SELECT 
    DATE_FORMAT(A.`date`,'%d/%m/%Y') Period, 
    SUM(if(B.category_name='Bike',1,0)) Bike,
    SUM(if(B.category_name='Car',1,0)) Car,
    SUM(if(B.category_name='Truck',1,0)) Truck,
    COUNT(*) Total
   FROM survey_details A JOIN vehicle_category B
   ON A.vehicle_id=B.vehicle_id
   GROUP BY DATE_FORMAT(A.`date`,'%d/%m/%Y'), B.category_name) C
GROUP BY C.PERIOD;

<>参见

在应用程序代码中认真考虑数据显示的处理问题的可能副本