prod xx xx ...
'prod 1'
'prod 2'
'prod 1'
'prod 3'
'Prod 4'
......
####
prod count
prod 1 10
prod 2 15
......
####
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;
}
####
(SUM(CASE WHEN prod IS NULL THEN Count ELSE 0 END)) AS Total,
(SUM(CASE WHEN prod = 'prod1' THEN 10 ELSE 0 END)) AS `prod1`,
(SUM(CASE WHEN prod = 'prod2' THEN 15 ELSE 0 END)) AS `prod2`,
(SUM(CASE WHEN prod = 'prod3' THEN 1 ELSE 0 END)) AS `prod3`,
.....
####
my $statement =
q{ SELECT }. $tmp.
q{ FROM( SELECT }. $pvt_col. q{, count(*) AS }. $count.
q{ FROM }. $table.
q{ GROUP BY }. $pvt_col. q{ WITH ROLLUP
) as temptbl;};
$sth = $dbh->prepare($statement);
....
####
SELECT (
(SUM(CASE WHEN prod IS NULL THEN Count ELSE 0 END)) AS Total,
(SUM(CASE WHEN prod = 'prod1' THEN 10 ELSE 0 END)) AS `prod1`,
(SUM(CASE WHEN prod = 'prod2' THEN 15 ELSE 0 END)) AS `prod2`,
(SUM(CASE WHEN prod = .....
...
FROM( SELECT prod, count(*) AS Count FROM prod GROUP BY prod WITH ROLLUP) as temptbl;