2009-10-15 4 views
0

저는 LINQ에 익숙하지 않습니다. 며칠 동안 질의에 임했습니다.이 기사에서 무지하게 항복 할 준비가되었습니다.특정 VB Linq 쿼리 도움말

다음과 같이해야합니다. 3 테이블을 합치십시오 (총 2 개의 데이터베이스에서). 표 표 2 표 3 그들을 를 호출 할 수 있습니다

표는 "조직"결과가

필터 "emplid"표 3에 조인

()을 표 2에 조인

:

Table3.success = 사실

Table3.appcode = "신"

탭 le1.empl_rcd = 0

시작일 (I 변수로 전달할 수있는 하나) (I 변수로 전달할 수있는 하나)

종료일

그룹화 : (나는 그룹화 생각하는 방법을이다)

양식 가입 된 테이블은 각 "emplid"그룹화 (원래 Table3의 "스탬프", 원래 Table3의 "emplid")에 대해 가장 오래된 (가장 먼 과거의) "스탬프"날짜 필드를 선택해야합니다 및 표 1)

결합 표로부터 일 만 그룹화 각 "emplid"최신 (가장 최근) "effdt"날짜 필드를 선택 (표 1에 원래 "effdt"원래 표 3 및 표 1의 "emplid")

선택 :

내가 필요 이전 논리에서 리턴 된 모든 행을 선택하십시오. 최종 행을 필터링하는 방법을 알아낼 수 있습니다.

는 여기에 내가 실행하는 데있어 마지막 일이며, 그것은 당신에게 내가 무엇을하고 있었는지의 아이디어를 제공 할 수 있습니다 : 당신이 지금까지 나를이 얻을 수있는 경우

query = (From j In db.table1s _ 
Join a In db.table3s _ 
On j.EMPLID Equals a.emplid _ 
Join d In db.table2s _ 
On d.ORG Equals j.Org _ 
Where a.appcode = "neo" _ 
Where a.success = True _ 
Select a.appcode, j.effdt, a.stamp, j.EMPLID, _ 
d.ORGANIZATION_DESCRIPTION, d.DEPARTMENT_DESCRIPTION, d.VP_DESCRIPTION, _ 
a.success _ 
Distinct).AsQueryable().AsEnumerable() 

, 당신의 신용을 줄 것이다. 하지만 다음 일도 할 수 있다면 신용을 제공하기 전에 YOU 크레딧을 제공 할 것입니다.

그 결과 각 "조직"에 대해 고유 한 "emplid"를 반환해야합니다. 결과는 다음과 같습니다.

org |  count | (other columns) 
------------------------------------------------ 
12345 |  15  |  etc... 
54321 |  7  |  etc... 

멍청한 놈을 도와 주셔서 감사합니다.

답변

0

내가 가장을하지 않을 수 있습니다이 쿼리를 사용하여 종료 효율적이지만 작동합니다. 가장 큰 문제는 하위 쿼리를 올바르게 수행하는 방법을 알지 못했다는 것입니다.

query = From final In _ 
     (From subfinal In _ 
      (From countdata In _ 
       (From a In _ 
        (From aa In db.table3s _ 
        Where aa.appcode = "neo" _ 
        Where aa.success = True _ 
        Group By aa.emplid Into Group _ 
        Select emplid = Group.Min(Function(f) f.emplid), _ 
          stampMin = Group.Min(Function(o) o.stamp) _ 
        ) _ 
       Join j In _ 
        (From jj In db.table1s _ 
        Where jj.empl_rcd = 0 _ 
        Group By jj.EMPLID Into Group _ 
        Select EMPLID = Group.Max(Function(m) m.EMPLID), _ 
         EffDate = Group.Max(Function(z) z.effdt) _ 
        ) _ 
       On j.EMPLID Equals a.emplid _ 
       Join jorg In _ 
        (From jj2 In db.table1s _ 
        Where jj2.empl_rcd = 0 _ 
        Select jj2.EMPLID, jj2.Org, jj2.effdt _ 
        ) _ 
       On j.EMPLID Equals jorg.EMPLID _ 
       And j.EffDate Equals jorg.effdt _ 
       Select j.EMPLID, a.stampMin, j.EffDate, jorg.Org _ 
       Distinct) _ 
      Where countdata.stampMin < EndDate _ 
      And countdata.stampMin > StartDate _ 
      Group By countdata.Org Into Group _ 
      Select count = Group.Count, Org = Org _ 
      ) _ 
     Select subfinal.Org, subfinal.count _ 
     ) _ 
     Join d In _ 
      (From dd In db.table2s _ 
      Select dd.ORG, dd.ORGANIZATION_DESCRIPTION, dd.DEPARTMENT_DESCRIPTION, _ 
        dd.VP_COLLEGE_DESCRIPTION _ 
      ) _ 
     On final.Org Equals d.ORG _ 
    Select final.count, final.Org, Org_desc = d.ORGANIZATION_DESCRIPTION, _ 
    Dept_descr = d.DEPARTMENT_DESCRIPTION, Coll_descr = d.VP_COLLEGE_DESCRIPTION 

희망이 다른 사람 ...

을하는 데 도움이
0

그것의 아닌 다양한 EmplId 그룹의 요구 사항이 직원을 계산 관련, 그러나 이것은 당신이 시작하는 방법을 정확하게 명확 :

query = From j In db.table1s _ 
     Join a In db.table3s On j.EMPLID Equals a.emplid _ 
     Join d In db.table2s On d.ORG Equals j.Org _ 
     Where a.appcode = "neo" _ 
     Where a.success = True _ 
     Group By j.Org, d.ORGANIZATION_DESCRIPTION Into Count() 

VB Group By on MSDN