【问题标题】:How to get all rows from left table in a join statement?如何在连接语句中从左表中获取所有行?
【发布时间】:2012-06-14 03:06:00
【问题描述】:

我有两张桌子。一个是Employee_Mstr,另一个是EmployeeLeaveRequest_mstr

我的数据:

【问题讨论】:

  • 告诉我们你得到了什么,请选择答案

标签: sql sql-server-2005 join left-join


【解决方案1】:

使用GROUP BY

select t1.emp_cd, t1.emp_name, sum(t2.num_dy) from 
  Employee_Mstr t1 left join 
  EmployeeLeaveRequest_mstr t2 on t1.emp_cd = t2.emp_cd group by t1.emp_cd, t2.emp_name;

【讨论】:

  • 我试过了,但这只是给了我 Emp_cd 3 条记录,而不是 1 和 2 条记录,因为我需要左表中的所有记录。
  • 即使这个也可以,但我不能将您的答案标记为只有一个我们可以标记为答案...感谢您的回复...
  • @TripatiSubudhi 当然,没问题。不过你可以投票赞成它;)
【解决方案2】:
SELECT tab1.emp_cd, tab1.emp_name, SUM(tab2.num_dy)
FROM Employee_Mstr tab1, "2nd Table Records" tab2
where tab1.emp_cd = tab2.emp_cd
group by tab1.emp_cd, tab1.emp_name;

应该可以,只需为第二个表设置正确的表名即可。

【讨论】:

  • 我试过了,但这只是给了我 Emp_cd "3" 记录,而不是 1 和 2,因为我需要左表中的所有记录。
  • 我更新了解决方案,在 MS SQL 上运行结果。如您所见,至少它对我来说效果很好。
  • @CsabaBenko,当你对这个问题有自己的答案时,为什么还要编辑别人的答案?!
  • 如果您需要左表的所有结果,我们需要左连接。 SELECT tab1.emp_cd, tab1.emp_name, SUM(tab2.num_dy) FROM Employee_Mstr tab1 LEFT JOIN "2nd Table Records" tab2 ON tab1.emp_cd = tab2.emp_cd group by tab1.emp_cd, tab1.emp_name;
【解决方案3】:
select mstr.Emp_cd, mstr.Emp_Name, isnull(sum(det.num_dy), 0) as num_day
from dbo.Employee_Mstr mstr
left join dbo.Employee_Nums det on (mstr.Emp_cd = det.Emp_cd)
group by mstr.Emp_cd, mstr.Emp_Name;

应该做的工作。

这是SQL执行的结果:

Emp_cd      Emp_Name
----------- --------------------------------------------------
1           A
2           B
3           C

(3 row(s) affected)

Emp_cd      num_dy
----------- -----------
3           4
3           2

(2 row(s) affected)

Emp_cd      Emp_Name                                           num_day
----------- -------------------------------------------------- -----------
1           A                                                  0
2           B                                                  0
3           C                                                  6
Warning: Null value is eliminated by an aggregate or other SET operation.

(3 row(s) affected)

【讨论】:

    【解决方案4】:

    试试这个:

    select t1.cd, t1.name, sum(t2.num_dy) from employee_Mstr t1 
    left join EmployeeLeaveRequest_mstr t2 on t1.cd = t2.cd group by t1.cd, t1.name;
    

    【讨论】:

      【解决方案5】:

      pk emp_cd 设为主键,然后使用left join 加入故事。 然后您可以使用sumof 添加值,在添加值之前使用groupby

      如果需要,请访问 w3school.com。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-18
        • 2019-01-16
        相关资源
        最近更新 更多