我有一个 Mysql 数据库,其中的表有两列 Department 和 deals as:
Department | deals
HR | A1
Sales | A2
Revenue | A1
HR | A3
我想在 asp.net gridview 中将数据显示为:
A1| A2 | A3
HR 1 0 1
Sales 0 1 0
Revenue 1 0 0
由于交易中的值(value)未知或不固定,我该如何做呢?
我在下面使用但它没有显示所需的输出
SELECT GROUP_CONCAT(CONVERT(deals,char(10)))
FROM Table1
group by Department
试试这个:
SELECT Department,
SUM(deals='A1') AS A1,
SUM(deals='A2') AS A2,
SUM(deals='A3') AS A3
FROM Table1
GROUP BY Department
对于动态交易
:
SELECT GROUP_CONCAT(DISTINCT CONCAT("SUM(deals='", deals, "') AS '", deals, "'")) INTO @temp
FROM Table1;
SET @sql = CONCAT('SELECT Department, ', @temp, 'FROM Table1 GROUP BY Department');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
或
SELECT Department,
SUM(IF(deals='A1', 1, 0)) AS A1,
SUM(IF(deals='A2', 1, 0)) AS A2,
SUM(IF(deals='A3', 1, 0)) AS A3
FROM Table1
GROUP BY Department;
对于动态交易
:
SELECT GROUP_CONCAT(DISTINCT CONCAT("SUM(IF(deals='", deals, "', 1, 0)) AS '", deals, "'")) INTO @temp
FROM Table1;
SET @sql = CONCAT('SELECT Department, ', @temp, 'FROM Table1 GROUP BY Department');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;