MySQL Select Query to generate dynamic column Result

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 08:51:28
D-Shih

You need to use Dynamic pivot

Create your pivot query Dynamically.

The main steps are as follows

  1. Declare a variable @sql to carry your SUM function and CASW WHEN Expression
  2. use CONCAT to combine your SUM function and CASW WHEN Expression string and main select string.
  3. use EXECUTE function execute SQL Dynamically.

look like this.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN Type =''',
      Type,
      ''' THEN Amount END) AS ',
      Type
    )
  ) INTO @sql
FROM tblTest;

SET @sql = CONCAT('SELECT
                    Name,', @sql, ' 
                   FROM tblTest
                   GROUP BY
                    Name;');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Result

    Name    Cash    Card    Cheque
1   Payment 300     NULL    400
2   Receipt 200      350    250

SQLfiddle

Hej,

Hope i got you right.

select name, type, sum(CASE WHEN Type in (select DISTINCT sub.type from 
tblTest sub) THEN Amount ELSE 0 END) as "sum" from tblTest
group by name, type;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!