【发布时间】:2015-08-24 06:51:25
【问题描述】:
我目前正在使用 C# 制作应用程序,但在连接两个表时遇到了一些困难。为了让事情更清楚,这里是我的表结构
表1(员工名单)
| EmployeeID | EmployeeName |
+------------+--------------+
| 1 | John Smith |
| 2 | Ian Smosh |
表2(推荐人名单)
| PersonalID | InviterID | InterviewerID |
+------------+-----------+---------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
Datagridview 上的输出应该是
| Employee Name | Invites | Interviews |
+---------------+---------+------------+
| John Smith | 2 | 1 |
| Ian Smosh | 0 | 1 |
我目前能够同时获得邀请,但不能同时获得采访。我只能得到一个。
这是我得到的
| Employee Name | Invites |
+---------------+---------+
| John Smith | 2 |
| Ian Smosh | 0 |
这是我的代码:
SELECT Table1.RecruiterName AS Name,
COUNT(Table2.InviterID) AS Invites,
COUNT(Table2.InterviewID) AS Interviews
FROM Table2 LEFT JOIN Table1 ON Table2.InviterID = Table1.EmployeeID
AND Table2.InterviewerID = Table1.InviterID
GROUP BY EmployeeName
有人知道我的代码有什么问题吗?
更新:我设法让它变得更好一点,但我一直在进步
| Employee Name | Invites | Interviews |
+---------------+---------+------------+
| John Smith | 2 | 2 |
| Ian Smosh | 0 | 1 |
John Smith 的条目只有 2 个邀请和 1 个采访。这是我当前的代码
SELECT Recruiters.RecruiterName AS Name, COUNT(Source.SourceID) AS Source, COUNT(Interview.InterviewID) AS Interview
FROM Recruiters
LEFT JOIN Hires Source ON Source.SourceID=Recruiters.RecruiterID
LEFT JOIN Hires Interview ON Interview.InterviewID=Recruiters.RecruiterID
GROUP BY RecruiterName
为什么约翰·史密斯在采访中得到的分数是错误的,而伊恩·斯莫什却是正确的。
【问题讨论】:
-
您应该将其标记为 sql,因为它是 sql 问题而不是 c#
-
哦,对不起..我使用的是 C#.NET,忘记删除标签 xD,谢谢 :)
-
因为2次邀请导致1次面试被计算两次
-
请出示正确名称和正确记录的表格。
-
飞盘是对的!我改变了我的答案,但飞盘的版本可以更快。检查一下!
标签: sql sql-server join