Warm tip: This article is reproduced from serverfault.com, please click

sql-使用Java的MySQL枢纽分析表

(sql - MySQL pivot table using java)

发布于 2020-11-28 02:17:19

我有一个表BPFinal,并具有以下列

ID   |  Partners  | Branch | Amount | Date 
1001 |  ABC       | BO1    | 2,000  | 2020/11/30
1001 |  ABC       | BO2    | 1,500  | 2020/11/30
1002 |  XYZ       | BO1    | 4,000  | 2020/11/30
1001 |  ABC       | BO1    | 5,000  | 2020/10/31

我正在尝试编写sql,以使用合作伙伴的动态标题创建数据透视表。设置日期后,每个分支将仅显示可用的合作伙伴及其对应的数据。输出应如下所示:

日期:2020/11/30

Branches | ABC   | XYZ
BO1      | 2,000 | 4,000
BO2      | 1,500 | 0.00

日期:2020/10/31

Branches | ABC
BO1      | 5,000

编写SQL的任何帮助将不胜感激。谢谢

Questioner
Ask Warvin
Viewed
11
Barbaros Özhan 2020-11-30 04:00:02

你可以使用动态SQL来进行动态透视,例如

SET @sql = NULL;
SET @date = '2020-11-30';

SELECT GROUP_CONCAT(
             CONCAT(
                    'SUM(CASE WHEN Partners = "', Partners,'" THEN Amount ELSE 0 END ) AS'
                    ,Partners
                    )
       )
  INTO @sql
  FROM ( SELECT DISTINCT Partners FROM BPFinal WHERE Date = @date ) AS b;

SET @sql = CONCAT('SELECT Branch,',@sql,
                   ' FROM BPFinal
                    WHERE Date = "',@date,'"' 
                  ' GROUP BY Branch'); 
                  
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; 

Demo