mysql - 将行值显示为要在 GridView 中显示的列

标签 mysql sql select group-by sum

<分区>

我有一个 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;

关于mysql - 将行值显示为要在 GridView 中显示的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20852885/

相关文章:

python - Django MySql,外键查询

php - 使用 dlsym 插入库

MySQL、MariaDB : How do I create a child-parent hierarchical recursive query?

Mysql FIFO消耗

mysql - 在触发器内循环 mysql 查询

Jquery .Show() .Hide() 未按预期工作

c# - 我怎样才能改进 LINQ?

mysql - MySQL 中的 SELECT 问题

php - 主机名可以注入(inject)SQL吗?

mysql - SQL中如何从多个表中获取数据