您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL选择特定的行值作为列名

MySQL选择特定的行值作为列名

SELECT a.ID, a.Campaign_ID, a.FirstName, a.LastName, MAX(CASE WHEN b.data = ‘qwerty1’ THEN b.Name END) qwerty1, MAX(CASE WHEN b.data = ‘qwerty2’ THEN b.Name END) qwerty2, MAX(CASE WHEN b.data = ‘qwerty3’ THEN b.Name END) qwerty3 FROM Participants a INNER JOIN Participants_Custom b ON a.ID = b.Participant_ID GROUP BY a.ID, a.Campaign_ID, a.FirstName, a.LastName

由于的值data未知,因此 动态sql 更为可取。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN b.data = ''',
      data,
      ''' THEN b.Name ELSE NULL END) AS ',
      CONCAT('`',data, '`')
    )
  ) INTO @sql
FROM Participants_Custom;

SET @sql = CONCAT('SELECT  a.ID,
                           a.Campaign_ID,
                           a.FirstName,
                           a.LastName,', @sql, 
                  'FROM     Participants a
                            INNER JOIN Participants_Custom b
                                ON a.ID = b.Participant_ID
                    GROUP   BY  a.ID,
                                a.Campaign_ID,
                                a.FirstName,
                                a.LastName');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
MySQL 2022/1/1 18:53:05 有381人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶