2014-10-09 62 views
0

我有一个简单的查询,我返回4个字段:[Year],[ServiceCredited],[Salary][CoveredEmployer]简单的SELECT查询导致笛卡尔连接?

使用Table1,我可以检索前3个字段,但我无法获得[CoveredEmployer]。要获得[CoveredEmployer],我必须加入到Table2,其中有更多详细信息,例如Members Employer_Org_ID,然后使用Employer_Org_Id将Table2连接到Table3以获取雇主名称或[CoveredEmployer]

SELECT a.SCHOOL_YEAR as Year, a.TOTAL_SERVICE_CREDIT as ServiceCredited, a.RETIREMENT_SALARY as Salary, c.ORG_NAME as CoveredEmployer 
FROM TBL1 a 
INNER JOIN TBL2 b ON a.MEMBER_ACCOUNT_ID = b.MEMBER_ACCOUNT_ID 
INNER JOIN TBL3 c ON b.ORG_ID = c.ORG_ID 
WHERE a.MEMBER_ACCOUNT_ID = 136079 
ORDER BY YEAR DESC; 

我然后,在代码,由[年]和分组的结果,其中存在多于1名雇主,具有[CoveredEmployer]值是“多雇主”:

var lyosGroupedByYear = lyos.GroupBy(x => x.Year).Select(x => new Years_Of_Service() 
      { 
       Year = x.Key, 
       //ServiceCredited = x.Sum(y => y.ServiceCredited), 
       //Salary = x.Sum(y => y.Salary), 
       ServiceCredited = x.First().ServiceCredited, 
       Salary = x.First().Salary, 
       CoveredEmployer = x.Count() > 1 ? "Multiple Employers" : x.First().CoveredEmployer 
      }).ToList(); 

的问题我的上面的查询是,我得到一个Cartesion加入,从而导致产生“多个雇主”的每个记录,我分组(下面是简单的2013年的结果,实际结果回到1982年同样的问题) :

2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Special School Dist-St. Louis 
2014   Hazelwood R-I Schools 
2014   St. Louis Community College 
2014   Special School Dist-St. Louis 
2014   St. Louis Community College 
2014   Special School Dist-St. Louis 
2014   St. Louis Community College 
2014   Special School Dist-St. Louis 
2014   St. Louis Community College 
2014   Special School Dist-St. Louis 
2014   St. Louis Community College 
2014   Special School Dist-St. Louis 
2014   St. Louis Community College 
2014   Special School Dist-St. Louis 
2014   St. Louis Community College 
2014   St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Hazelwood R-I Schools 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 St. Louis Community College 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 
2013 1 95476.8 Special School Dist-St. Louis 

这是我第一次处理笛卡尔联接。有没有人知道在我的查询中解决这个问题的可能方法?

+2

所以,你必须为每个'tbl1'记录每个'tbl2'记录多个'tbl2'记录,和/或多个'tbl3'记录?其中一个最终结果的原始数据样本可能会有所帮助。你为什么不在你的查询中分组/计数? – 2014-10-09 16:01:04

+0

感谢您的回复亚历克斯。我最终弄清楚了这个问题。我有'JOIN'正确的Tbl2&Tbl3,但是对于Tbl1&Tbl2,我使用了错误的Key值作为Join。我做了一些其他修改,这是我的问题的来源。 – 2014-10-09 16:30:24

+0

@AnalyticLunatic祝贺你自己解决了你的问题。你能否请你张贴 - 并自己接受 - 你的解决方案,所以这个问题可能会显示为“回答”。这对未来的访客很重要。 – 2014-10-09 17:52:49

回答

0

原来我加入Tbl1 & Tbl2错误的字段。本来应该的MEMBER_CONTR_ID代替MEMBER_ACCOUNT_ID

SELECT a.SCHOOL_YEAR as Year, a.TOTAL_SERVICE_CREDIT as ServiceCredited, a.RETIREMENT_SALARY as Salary, c.ORG_NAME as CoveredEmployer 
FROM TBL1 a 
INNER JOIN TBL2 b ON a.MEMBER_CONTR_ID = b.MEMBER_CONTR_ID 
INNER JOIN TBL3 c ON b.ORG_ID = c.ORG_ID 
WHERE a.MEMBER_ACCOUNT_ID = 136079 
ORDER BY YEAR DESC;