SSRS表格/报告和外部联接结果

时间:2016-09-15 16:01:34

标签: sql-server reporting-services

我的任务是根据员工在当年获得和没有的福利来制定入学申请表。完整报告的每个页面将显示每个员工的信息,其中典型信息显示在顶部,然后列出所有可用福利类型,旁边有一列显示可能的美元数字,表明员工当前正在为此付费那种保险。如果此列为空白,则该员工没有该保险。

这就是表单的样子: enter image description here

我编写了一个使用左外连接的查询,该外连接从主福利表中为每个福利类型返回一行,其中包含一些行,包括1名员工的员工信息和付款金额。当我修改查询以检索多个员工的结果时,结果集仅包含额外的行以获得额外员工所支付的福利。我的想法是我需要计算出我的数据集,以便总行数=员工数量*收益数量。也许我会以错误的方式解决这个问题。

搜索高低,但觉得有必要接触到我从中学到很多东西的社区。是的,第一次潜伏在帖子上。希望我的情况清晰简洁地描述。

编辑:这是一个SQL,可以让我找到我在1个人身上寻找的结果。当我要求额外的员工时,它只返回他们支付的福利行。福利表仅为员工支付的福利行。 pr_deduction_master表具有所有优点。不要问我关于代码指定......似乎这个实现在某些方面做得不好。

select emp.a_name_last + ', ' + emp.a_name_first as 'Name',   emp.a_employee_number, emp.e_ssn, emp.e_email,
   emp.ed_p_address1, emp.ed_p_address_city, emp.ed_p_address_state, emp.ed_p_address_zip,
   a.a_deduction_code, a.a_ded_desc_long, b.a_employee_number, b.dh_emp_amount
from
(select distinct a_deduction_code, a_ded_desc_long from pr_deduction_master where a_deduction_code in 
(2000,2005,2007,2008,2010,2015,2020,2025,2027,2030,2040,2045,
2050,8055,8205,8210,8215,8220,8225,8230,8235,8240,8245,8250,
8252,8253,8255,8260,8280,8290,8295,8300,8305,8310,8315,8316,
8700,8701,8702,9100,9150,9151,9200)) a
left outer join
(select distinct a_employee_number, a_deduction_code, dh_emp_amount from pr_ded_history where a_employee_number in (603) and dh_pr_warr like '10816A') b
on a.a_deduction_code = b.a_deduction_code
left outer join
(select a_employee_number, a_name_last, a_name_first, ed_p_address1, ed_p_address_city, ed_p_address_state, ed_p_address_zip, e_ssn, e_email 
from pr_employee_master) emp
on b.a_employee_number = emp.a_employee_number
order by a_ded_desc_long

我希望这会让任何人过分唠叨。新手试图在这里变得更好。我将研究这些建议。真的很感激回应。

编辑2:遵循Daniel E的建议,"在离开加入[EmployeeBenefits]"表之前,先采取[员工]交叉申请[福利]交叉应用向我展示了下面需要的内容。

Employee Table and Benefits Table

当我尝试使用第3个表的连接变体时,扣除历史记录表,其中每个员工扣减记录一个月,我得到不希望的结果。我希望加入第三张表并在员工没有获得此类福利扣除的行上显示NULL,然后在上一期间支付的福利金额为美元金额。

1 个答案:

答案 0 :(得分:1)

为了实现我想要实现的目标,我选择了接近Daniel E.所说的内容。

  

在离开加入之前,[雇员]交叉申请[福利]   [EmployeeBenefits]表 - Daniel E.

不同之处在于我说了CROSS JOIN。当我离开加入[EmployeeBenefits]表时,我仍然遇到困难,因为我试图将过滤器应用于该表,这反过来使其成为一个内部联接。这反过来是通过使用过滤器对该表嵌套查询来解决的。

再次感谢大家的想法和帮助!!