我有一个查询,它提取用户培训的列表,已经完成培训的人员,以及哪些培训已经完成。我试图在我的水晶报告中使用这个查询,但是我仍然需要用日期范围参数显示训练的主列表。我想我可以用报告中的两个命令来显示主列表,但这是否有可能通过报告中的一个命令来实现呢?
查询使用两个表。表A有培训列表,表B有用户信息,如用户名、培训名称和完成日期。我已经将表B加入到表A中,以获得培训列表,并查看谁完成了培训。
select
from table A a
left join table B b on b.officerID = a.OfficerID
向查询中添加日期范围将更改显示为结果的培训列表。
报告需要显示用户名、培训的整个列表(不管日期范围参数)和日期。
User: XYZ
Training Date
--------------------
ABC 7/1/20
DEF
GHI 7/4/20
发布于 2020-07-21 13:51:43
我理解您正在处理的模式有点像这样:
培训<- UserTraining ->用户
您希望编写一个查询,并为每个用户显示所有的培训,不管他是否完成了培训。
如果我做对了(或接近),你可以这样做:
SELECT * FROM Training
LEFT OUTER JOIN UserTraining ON Training.Id = UserTraining.TrainingFK
LEFT OUTER JOIN User ON USER.Id = UserTraning.UserFK
然后,在水晶报表设计器中,您将按用户分组,在组标题中显示用户,并在详细信息中显示培训和日期。当日期不属于日期范围时,可以使用公式抑制日期字段。
这种方法的问题是,如果您的表增长过大,您将遇到性能问题。
一个可能的改进是更改查询:
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
我将这两个查询都保留在这个有目的的解决方案中,因为我认为这种方式更容易跟踪,因为第一个查询更友好。
https://stackoverflow.com/questions/63014598
复制相似问题