Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 Group By values多列上的值相等,输出查找值作为字段名,按日期分组_Mysql_Pivot Table - Fatal编程技术网

MySQL Group By values多列上的值相等,输出查找值作为字段名,按日期分组

MySQL Group By values多列上的值相等,输出查找值作为字段名,按日期分组,mysql,pivot-table,Mysql,Pivot Table,近似 如何使用mysql将下面的mysql数据库表转换为输出: id entity_id volunteer_1 volunteer_2 volunteer_3 1 1540 1933 1253 2543 2 1638 2543 2123 1736 3 1736 1253 1933 2123 4 1834 15

近似

如何使用mysql将下面的mysql数据库表转换为输出:

id entity_id volunteer_1 volunteer_2 volunteer_3
 1      1540        1933        1253        2543
 2      1638        2543        2123        1736
 3      1736        1253        1933        2123
 4      1834        1525        1253        2123
 5      1932        2123        2543        2451
 6      2030        2854        2451        1933
 7      2128        2451        2854        2543
输出

              Jan-15 Feb-16 Mar-16
Actual Name 1      3      4      6
Actual Name 2      3      3      5
Actual Name 3      1      5      6
注意事项:

  • 日期时间由链接到活动的实体\u id字段确定。活动\u日期\u时间
  • 每个志愿者ID都应该通过链接到字段中ID的contact.first_name和contact.last_name来输出实际姓名

  • 通过先进行联合来解决问题,以根据建议的答案获取数据(单列格式)。建议的答案不会合并来自多个列的类似数据。然后,您可以处理临时结果,并根据需要进行转换。此外,它必须是一个存储过程,以确保语句不会以结果执行

        DELIMITER $$
        DROP PROCEDURE IF EXISTS `civicrm_report_tmp_volunteer`$$
    
        CREATE PROCEDURE `civicrm_report_tmp_volunteer`()
        BEGIN
                DROP TABLE IF EXISTS civicrm_report_tmp_volunteer_hours;
                SET @group_concat_max_len = 5000;
    
    
                CREATE TEMPORARY TABLE civicrm_report_tmp_volunteer_hours AS 
                SELECT
                    CONCAT(c.first_name, ' ' , c.last_name) as contact_name,
                    a.contact_id as contact_id,
                    EXTRACT( YEAR_MONTH FROM ca.activity_date_time ) as sort_date,
                  CONCAT(
                        MONTHNAME(STR_TO_DATE(EXTRACT( MONTH FROM ca.activity_date_time), '%m')),
                        "-",
                        EXTRACT( YEAR FROM ca.activity_date_time )) as month_year,
                    -- a.activity_id,
                    -- ca.activity_type_id,
                    -- ca.activity_date_time,
                    -- ca.duration,
                    SUM(ca.duration) as activity_duration,
                    COUNT(DISTINCT (a.activity_id)) activity_count
                FROM
                (
                  SELECT volunteer_1_543 as contact_id, entity_id as activity_id FROM civicrm_value_volunteer_details_103
                  WHERE volunteer_1_543 IS NOT NULL
                  UNION
                  SELECT volunteer_2_544 as contact_id, entity_id as activity_id  FROM civicrm_value_volunteer_details_103
                  WHERE volunteer_2_544 IS NOT NULL
                  UNION
                  SELECT volunteer_3_545 as contact_id, entity_id as activity_id  FROM civicrm_value_volunteer_details_103
                  WHERE volunteer_3_545 IS NOT NULL
                  UNION
                  SELECT volunteer_4_546 as contact_id, entity_id as activity_id  FROM civicrm_value_volunteer_details_103
                  WHERE volunteer_4_546 IS NOT NULL
                ) as a
                LEFT JOIN civicrm_activity ca
                ON a.activity_id = ca.id
                LEFT JOIN civicrm_contact c
                ON c.id = a.contact_id
                WHERE ca.activity_type_id IN (184)
                GROUP BY a.contact_id, month_year;
    
                SET @query = null;
    
                SELECT
                  GROUP_CONCAT(DISTINCT
                    CONCAT(
                      'MAX(IF(sort_date = ''',
                      sort_date,
                      ''', activity_duration, 0)) AS ',
                      "'", month_year, "' "
                    )
                  ) INTO @query
                FROM civicrm_report_tmp_volunteer_hours;
    
                SET @query = CONCAT('SELECT contact_name, ', @query , ' FROM civicrm_report_tmp_volunteer_hours GROUP BY contact_id');
                PREPARE stmt FROM @query;
                EXECUTE stmt;
                DEALLOCATE PREPARE stmt;
        END$$
    
        DELIMITER ;
    
        CALL civicrm_report_tmp_volunteer();
    

    日期-时间由链接到活动的实体id字段确定。活动\u日期\u时间
    是某种不可见的表吗?可能是不可见的重复项。同样的分贝。4位数字本身就是联系人表的外键(contact.id)。那么为什么我们看不到它呢?id first_name last_name 1540实际姓名1638实际姓名2