【问题标题】:Show row values as columns to display in a gridview [duplicate]将行值显示为要在网格视图中显示的列[重复]
【发布时间】:2013-12-31 06:27:29
【问题描述】:

我有一个 Mysql 数据库,其中一个表有两列 Department 和交易:

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

如果交易下的值未知或不固定,我该如何做同样的事情。 我在下面使用,但它没有显示所需的输出

SELECT GROUP_CONCAT(CONVERT(deals,char(10)))
FROM Table1
group by Department

【问题讨论】:

标签: mysql sql select group-by sum


【解决方案1】:

试试这个:

SELECT Department, 
       SUM(deals='A1') AS A1, 
       SUM(deals='A2') AS A2, 
       SUM(deals='A3') AS A3
FROM Table1
GROUP BY Department

对于Dynamic Deals

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;

对于Dynamic Deals

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;

【讨论】:

  • 如果交易价值也是动态的或不知道,那么我们该怎么做呢?
  • @user2486976 查看我更新的动态交易答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
相关资源
最近更新 更多