首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >水晶报表:使用日期范围参数将主列表保留在报表上

水晶报表:使用日期范围参数将主列表保留在报表上
EN

Stack Overflow用户
提问于 2020-07-21 12:30:08
回答 1查看 22关注 0票数 0

我有一个查询,它提取用户培训的列表,已经完成培训的人员,以及哪些培训已经完成。我试图在我的水晶报告中使用这个查询,但是我仍然需要用日期范围参数显示训练的主列表。我想我可以用报告中的两个命令来显示主列表,但这是否有可能通过报告中的一个命令来实现呢?

查询使用两个表。表A有培训列表,表B有用户信息,如用户名、培训名称和完成日期。我已经将表B加入到表A中,以获得培训列表,并查看谁完成了培训。

代码语言:javascript
运行
复制
select 
from table A a
left join table B b on b.officerID = a.OfficerID

向查询中添加日期范围将更改显示为结果的培训列表。

报告需要显示用户名、培训的整个列表(不管日期范围参数)和日期。

代码语言:javascript
运行
复制
User: XYZ
Training      Date
--------------------
ABC           7/1/20
DEF           
GHI           7/4/20
EN

回答 1

Stack Overflow用户

发布于 2020-07-21 13:51:43

我理解您正在处理的模式有点像这样:

培训<- UserTraining ->用户

您希望编写一个查询,并为每个用户显示所有的培训,不管他是否完成了培训。

如果我做对了(或接近),你可以这样做:

代码语言:javascript
运行
复制
SELECT * FROM Training
LEFT OUTER JOIN UserTraining ON Training.Id = UserTraining.TrainingFK
LEFT OUTER JOIN User ON USER.Id = UserTraning.UserFK

然后,在水晶报表设计器中,您将按用户分组,在组标题中显示用户,并在详细信息中显示培训和日期。当日期不属于日期范围时,可以使用公式抑制日期字段。

这种方法的问题是,如果您的表增长过大,您将遇到性能问题。

一个可能的改进是更改查询:

代码语言:javascript
运行
复制
SELECT * FROM Training
LEFT OUTER JOIN (
    SELECT TrainingFK, Date FROM UserTraining WHERE Date BETWEEN @date_start and @date_end
) as X ON Training.Id = X.TrainingFK
LEFT OUTER JOIN User ON USER.Id = UserTraning.UserFK

我将这两个查询都保留在这个有目的的解决方案中,因为我认为这种方式更容易跟踪,因为第一个查询更友好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63014598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档