我的任务是根据员工今年的福利保险和不享受福利的情况,编制一份登记表。完整报告的每一页都将显示每个雇员的信息,其典型信息显示在顶部,然后列出所有可用福利类型的列表,并在其旁边显示一个可能的美元数字,显示该雇员目前正在为这类保险支付费用。如果此列为空,则该员工没有此范围。
这就是表单的样子:

我编写了一个使用左外部联接的查询,该查询从主福利表中为每个福利类型返回一行,其中包含一些行,包括雇员信息和单个员工的支付金额。当我修改查询以检索多个员工的结果时,结果集只包含额外员工支付的福利的其他行。我的想法是,我需要计算出我的数据集,这样总行数=员工数量*福利数量。不过,也许我走错路了。
到处搜索,但觉得有必要联系一个我从中学到了很多东西的社区。是啊,第一次偷偷摸摸。希望我的情况有清楚和简明的描述。
编辑:这里是,它为我提供了我在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的建议,“员工在加入EmployeeBenefits之前交叉申请福利”交叉申请向我展示了以下所需的内容。
当我尝试使用第三个表的联接变量,即每个雇员的扣减记录记录一个月的演绎历史表时,我会得到不想要的结果。我希望加入第三个表,并显示为NULL在线上,雇员没有这种类型的福利扣减,然后一个美元金额,他们支付的福利在上一个时期。
发布于 2016-09-22 20:12:42
为了完成我想要达到的目标,我做了一些接近丹尼尔E.的话。
将员工交叉申请福利,然后再加入EmployeeBenefits - Daniel。
不同之处在于我利用了交叉连接。当我离开加入EmployeeBenefits表时,我仍然遇到困难,因为我试图对该表应用一个筛选器,这反过来又使它成为一个内部连接。然后,通过使用过滤器对该表嵌套查询来解决这一问题。
再次感谢大家的想法和帮助!
https://stackoverflow.com/questions/39515603
复制相似问题