SQL视图表内连接'和' statment

时间:2016-12-10 00:17:14

标签: sql sql-server

我坚持从表中获取一些数据。

Project有多个产品,但其中一个是Primary(PrimaryProduct)。

PrimaryProduct =产品。

产品是Estimate的一部分。

每个项目都安排分配给船员。

基本上,我可以带队员的主表是tblProjectLabourSchedule和那里的ProjectEstimateID。

所以我需要获得分配给项目但仅限于主要产品的船员。我的查询已经显示项目的主要产品,但我无法获得船员。我现在的剧本如下,但现在我得到了所有被分配到项目的工作人员(主要和次要产品):

以下是我的表格:

                 tblProject:
                    ProjectID
                    PrimaryProductID

                tblProduct:
                    ProductID

                tblProjectEstimate:
                    ProjectEstimateID
                    ProjectID
                    EstimateID
                    CrewID

                tblProjectLabourSchedule:
                    ProjectLabourScheduleID
                    ProjectID
                    ProjectEstimateID << 
                    CrewLeaderID

                tblCrew:
                    CrewID
                    FirstName

                tblServiceTicket:
                    ServiceTicketID
                    ProjectID

                tblEstimateDetail:
                    EstimateDetailID
                    EstimateID
                    ActivityID
                    ProductID

                tblCrewLeaderMember:
                    CrewLeaderMemberID
                    CrewLeaderID
                    CrewID

脚本:

SELECT    tblProjectLabourSchedule.CrewLeaderID

    FROM  tblServiceTicket INNER JOIN

        //gets primary product for the project

         tblProject on tblServiceTicket.ProjectID = tblProject.ProjectID inner join
         tblProduct on tblProject.PrimaryProductID = tblProduct.ProductID

        /// gets crews for the products

       tblProjectEstimate on tblServiceTicket.ProjectID = tblProjectEstimate.ProjectID inner join
       tblProjectLabourSchedule on tblProjectEstimate.ProjectEstimateID = tblProjectLabourSchedule.ProjectEstimateID

2 个答案:

答案 0 :(得分:0)

以下将为您提供主要产品的船员ID。您可以根据需要加入其他表格。

SELECT e.CrewID 
FROM tblProjectEstimate e 
INNER JOIN tblProject p ON p.ProjectID = e.ProjectID
INNER JOIN tblEstimateDetail d ON e.ProjectEstimateID = d.EstimateID AND d.ProductID = p.PrimaryProductID

更新: 使用带有tblEstimateDetail的左连接将基本列出所有项目估计,而不管主要产品。

你能试试吗?这将排除主要产品与估算项目不匹配的任何估算细节。

FROM  
tblServiceTicket s    
INNER JOIN tblProjectEstimate e on s.ProjectID = e.ProjectID  
left join tblProject as p ON p.ProjectID = e.ProjectID 
left join tblEstimateDetail as c ON e.ProjectEstimateID = c.EstimateID AND c.ProductID = p.PrimaryProductID
WHERE c.ProjectEstimateID IS NOT NULL 

答案 1 :(得分:0)

<强>更新:

@Bhaskar,这是对我有用的查询:

tblProjectEstimate as e on tblServiceTicket.ProjectID = e.ProjectID and e.IsPrimary = 'True' left join
tblCrew on e.CrewID = ptsweb.tblCrew.CrewID