如何在iReport中将多个和查询到同一SQL查询的多个列中?

如何在iReport中将多个和查询到同一SQL查询的多个列中?,sql,jasper-reports,ireport,Sql,Jasper Reports,Ireport,这有效吗?如何改进 我试图根据条件将一组列中的数据转换成两组列。我尝试过的所有方法都以多行结束 这非常类似于,但有点复杂 以下是我所做的: (因为这是针对iReport/JasperReports的,所以使用多个查询会是一个很大的麻烦。)基本上,我们希望从两个表格中获得军队作战演习中的生活友好和非友好士兵的统计数据 挑选 陆军,陆军,重点部队, 计数(如果soldier.type_id=1,则为1,否则为空结束)作为friendCount, 总和(如果soldier.type_id=1,则so

这有效吗?如何改进

我试图根据条件将一组列中的数据转换成两组列。我尝试过的所有方法都以多行结束

这非常类似于,但有点复杂

以下是我所做的: (因为这是针对iReport/JasperReports的,所以使用多个查询会是一个很大的麻烦。)基本上,我们希望从两个表格中获得军队作战演习中的生活友好和非友好士兵的统计数据


挑选
陆军,陆军,重点部队,
计数(如果soldier.type_id=1,则为1,否则为空结束)作为friendCount,
总和(如果soldier.type_id=1,则soldier.id=0结束)作为friendAmount,
计数(如果soldier.type_id=2,则为1,否则为空结束)为EnemCount,
作为enemyAmount的总和(如果soldier.type_id=2,则soldier.0结束)
来自士兵、军队
其中soldier.army\u key=army.army\u key
和army.wargame_id=$P{GAME_id}
死亡是无效的
按陆军分组。陆军密钥
按单位订购数量ASC

我觉得很好。没有笛卡尔积,也没有违反单值规则

其他通用性能建议也适用。从优化器获取报告以确保正确使用索引

考虑复合索引是否有帮助(例如陆军:
wargame\u id
army\u key


考虑覆盖索引(例如士兵:
army\u key
dead
type\u id
成就
)。

我觉得不错。没有笛卡尔积,也没有违反单值规则

其他通用性能建议也适用。从优化器获取报告以确保正确使用索引

考虑复合索引是否有帮助(例如陆军:
wargame\u id
army\u key

考虑覆盖索引(例如士兵:
army\u key
dead
type\u id
成就


SELECT 
   army.army_key UNIT_NUM,
   COUNT( case when soldier.type_id = 1 then 1 else NULL end ) AS friendCount, 
   SUM( case when soldier.type_id = 1 then soldier.achievement else 0 end ) AS friendAmount, 
   COUNT( case when soldier.type_id = 2 then 1 else NULL end ) AS enemyCount, 
   SUM( case when soldier.type_id = 2 then soldier.achievement else 0 end ) AS enemyAmount
   FROM soldier, army
   WHERE soldier.army_key = army.army_key 
      AND army.wargame_id = $P{GAME_ID} 
      AND soldier.dead is null 
   GROUP BY army.army_key
   ORDER BY UNIT_NUM ASC