use DBI; my $dbh = connect(....); my $pvt_col = 'prod'; my $count = 'count'; my $table = 'prod' my $stmt = q{ SELECT CONCAT( '(SUM(CASE WHEN }. $pvt_col. q{ IS NULL THEN Count ELSE 0 END)) AS Total, ', GROUP_CONCAT(DISTINCT CONCAT( '(SUM(CASE WHEN }. $pvt_col. q{ = ''', }. $pvt_col. q{, ''' THEN ', }. $count. q{, ' ELSE 0 END)) AS `', }. $pvt_col. q{, '`' ) ) ) FROM ( SELECT }. $pvt_col. q{, count(*) AS }. $count. q{ FROM }. $table. q{ GROUP BY }. $pvt_col. q{ WITH ROLLUP) as temptbl;}; my $sth = $dbh->prepare($stmt); $sth->execute(); my $tmp; while ( ($tmp) = $sth->fetchrow_array() ) { print"$tmp\n"; last; }