2011-02-15 4 views
0

좋아, 그래서 내가 여기에 4 개 테이블을 처리하고 -SQL 문 도움말

프로젝트, 회원, 반복 및 ProjectIterationMembers. (- 프로젝트가 적어도 하나의 반복으로 구성되어 있지만, 더 반복 나중에 추가 할 수 있습니다 start date, end date) 나는 새로운 프로젝트 세부 사항을 만들 때

, 나는 Project 테이블로 쓰고 나는 또한 반복을 지정하고 . Members 테이블의 멤버가 이제 반복에 할당되면 ProjectIterationMembers 테이블에 기록됩니다.

다음 SQL 문은 회사의 모든 프로젝트 검색 -

프로젝트 이름, 프로젝트 관리자 및 프로젝트 상태가 표시됩니다.

그러나 원하는 것은 특정 회원이 할당 된 프로젝트 만 표시합니다. MemberID를 전달하려고하면 결과가 검색되지 않습니다.

Project   Iterations    ProjectIterationMember Member 
=============== ======================== ========================= =========== 
ProjectID (PK) ProjectIterationID (PK) ProjectIterationMemberID MemberID 
CompanyID  ProjectID    ProjectIterationID  FirstName 
ProjectName  StartDate    MemberID     LastName 
StartDate  EndDate 
EndDate 
Description 
+0

Proejct Manager 만 검색하므로 전달중인 프로젝트 회원 ID가 CompanyRole = 'Project Manager'입니까? –

+0

해당 프로젝트에 프로젝트 관리자의 이름을 표시하고 싶지만 로그인 한 특정 멤버에게 할당 된 프로젝트 만 표시하기를 원하므로 memberID를 변수로 전달해야합니다. 어떻게 해결할 수 있습니까? – MiziaQ

+1

ProjectIterationMember 테이블에 두 번 가입해야합니다. 한 번은 관리자 이름을 가져오고, 한 번만 로그인 한 사용자와 일치하는 행을 가져옵니다. 쉼표로 구분 된 테이블과 조건의 거대한 목록 대신 조인으로 이것을 다시 작성하십시오. 이 코드를 읽어야하는 자신과 다른 모든 사람들을 괴롭 히고 있습니다 (동료/후임자와 같은). –

답변

1

나는 그것을 시도 줄거야 ...

SELECT DISTINCT 
    p.*, 
    m.MemberID, 
    m.FirstName + ' ' + m.LastName AS ProjectManager 
FROM 
    Project p 
INNER JOIN 
    Iterations i 
ON 
    p.ProjectID = i.ProjectID 
INNER JOIN 
    ProjectIterationMember pim1 
ON 
    i.ProjectIterationId = pim1.ProjectIterationID 
INNER JOIN 
    Member m 
ON 
    pim1.ProjectIterationMemberID = m.MemberID 
AND 
    m.CompanyRole = 'Project Manager' 
INNER JOIN 
    ProjectIterationMember pim2 
ON 
    i.ProjectIterationId = pim2.ProjectIterationID 
AND 
    pim2.ProjectIterationMemberID = ? 
WHERE 
    p.CompanyID = ? 
ORDER BY 
    p.StartDate DESC 
+0

이 코드를 약간 수정해야했지만 지금은 작동합니다 ... 많은 Dan에게 감사드립니다! – MiziaQ

0
SELECT 
    p.ProjectName, 
    p.ProjectID, 
    p.Status, 
    p.CompanyID, 
    p.StartDate, 
    m1.MemberID, 
    m2.FirstName + ' ' + m2.LastName AS ProjectManager 
FROM 
    Project p INNER JOIN Iteration i on p.ProjectID = i.ProjectID 
    INNER JOIN ProjectIterationMember pim ON i.ProjectIterationId = pim.ProjectIterationID 
    INNER JOIN Member m1 ON pim.MemberID = m1.MemberID 
    LEFT OUTER JOIN Memember m2 ON pim.MemberID = m2.MemberID AND m2.CompanyRole = 'Project Manager' 
WHERE 
    p.CompanyID = @coId AND 
    m.MemberID = @memberId 
ORDER BY 
    Project.StartDate DESC 

이 결과 되더라도을 줄 것이다 다음과 같이

SELECT DISTINCT(Project.ProjectName), Project.ProjectID, Project.Status, 
Project.CompanyID, Project.StartDate, m.MemberID, 
m.FirstName + ' ' + m.LastName AS ProjectManager 
FROM Project, Member m, ProjectIterationMember, Iterations i WHERE 
m.CompanyRole = 'Project Manager' AND Project.CompanyID = '" + co_id + "' AND 
m.MemberID = ProjectIterationMember.MemberID AND i.ProjectIterationID = 
ProjectIterationMember.ProjectIterationID AND i.ProjectID = Project.ProjectID 
ORDER BY Project.StartDate DESC 

내 테이블의 구조는 No PM이 지정되고 memberid 및 companyid가 매개 변수로 전달됩니다.

+0

Ooops 좀 늦었 어. :) –