将Access Pivot查询转换为Mysql

将Access Pivot查询转换为Mysql,mysql,pivot,crosstab,Mysql,Pivot,Crosstab,我试图弄清楚如何将这个交叉表查询转换为mysql中的等价查询。任何帮助都将不胜感激 TRANSFORM Sum(QryMainCrosstab.Bene_Act) AS SumOfBene_Act SELECT QryMainCrosstab.DistrictCode, QryMainCrosstab.District_Name AS District FROM QryMainCrosstab WHERE (((QryMainCrosstab.Month)=[Forms]![frmRespons

我试图弄清楚如何将这个交叉表查询转换为mysql中的等价查询。任何帮助都将不胜感激

TRANSFORM Sum(QryMainCrosstab.Bene_Act) AS SumOfBene_Act
SELECT QryMainCrosstab.DistrictCode, QryMainCrosstab.District_Name AS District
FROM QryMainCrosstab
WHERE (((QryMainCrosstab.Month)=[Forms]![frmResponseReport]![txtMonth]))
GROUP BY QryMainCrosstab.DistrictCode, QryMainCrosstab.District_Name
PIVOT QryMainCrosstab.StrategicResponse;
QryMainCrossTab是另一个sql查询

MySQL没有pivot函数,但可以使用带有
CASE
表达式的聚合函数来复制它

该代码类似于以下代码:

SELECT q.DistrictCode, 
  q.District_Name AS District,
  sum(case when q.StrategicResponse = 'yourResponse1' then q. Bene_Act end) SumResponse1,
  sum(case when q.StrategicResponse = 'yourResponse2' then q. Bene_Act end) SumResponse2,
  sum(case when q.StrategicResponse = 'yourResponse3' then q. Bene_Act end) SumResponse3,
  sum(case when q.StrategicResponse = 'yourResponse4' then q. Bene_Act end) SumResponse4
FROM QryMainCrosstab q
WHERE q.Month = yourValue
GROUP BY q.DistrictCode, q.District_Name
您将用每个
'yourResponse1'
等替换
策略应答的实际值。您还需要在
WHERE
子句中将要筛选的月份传递到此查询中