2011-02-15 3 views
0

オクラホマので、私はここに4つのテーブルを扱っています -SQLステートメントのヘルプ

プロジェクト、メンバー、反復およびProjectIterationMembers。

私は新しいプロジェクトの詳細を作成するときに、私はProjectテーブルにそれらを書いていますし、私も(end datestart date - プロジェクトは、少なくとも一回の反復で構成されていますが、より多くの反復は後で追加することができる)の繰り返しを指定しています。 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マネージャのみを取得しているため、渡すプロジェクトメンバーIDはCompanyRole = 'Project Manager'ですか。 –

+0

そのプロジェクトにプロジェクトマネージャの名前を表示したいのですが、ログインしている特定のメンバーに割り当てられたプロジェクトだけを表示したいので、memberIDを変数として渡す必要があります。どうすれば修正できますか? – MiziaQ

+1

ProjectIterationMemberテーブルに2回参加する必要があります.1回はマネージャの名前を取得し、もう1回はログインしたユーザーと一致する行のみを取得します。カンマ区切りのテーブルや条件の巨大なリストではなく、ジョインでこれを書き直してください。あなたは自分自身とこのコードを読まなければならない他のすべての人たちを悩ませています(同僚/後継者のように)。 –

答えて

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が少し遅れました:) –