来自两个数据库的两个数据集a,b。a是员工填写的计划数据,b是正时系统的真实数据。a数据集中包含人员、产品、产品种类等信息。
想实现:报表中一条信息能看出计划数据和真实数据的对比。
计划信息显示所有,真实表的数据根据计划信息中的人员、产品种类汇总查询显示。
1)计划表和真实表中都有的数据全显示。
2)当计划表中有,真实表中没有的数据,在左侧显示计划表数据,右侧真实数据显示空或者0.
3)当计划表中没有,真实表中有的数据,在表右侧显示真是表数据,左侧显示计划表为空或者0.
我目前是查询出计划表所有数据,在真实表上写两个参数${人员},${种类},在真实表中写上两个参数注入计划表中的人员和种类所在的单元格。但是这样就只能满足1)和2)
问题:怎么同时满足所有条件。
我觉得你可以用三个数据集。第一个数据集是维度表,第二个数据集是计划表,第三个数据集是真实数据表
然后三个数据集在报表中依次从左到右展示 ,第二个数据集设置字段过滤,设置关联字段为第一个数据集中的某些字段,第三个也是这样操作。
SELECT A.Date,*,B.Date FROM dbo.C
LEFT JOIN A ON A.Name = C.Name -- 拼接计划
LEFT JOIN B ON B.Name = C.Name -- 拼接实际
WHERE 1=1
AND C.Name IN(SELECT DISTINCT Name FROM (SELECT Name FROM A UNION SELECT Name FROM B) FName)
AND -- 查询条件
select a.*,b.* from a full join b on a.人员=b.人员 AND a.产品=B.产品
WHERE (A.人员='${人员}' AND A.之类='${种类}') or (b.人员='${人员}' AND B.之类='${种类}')