2013-07-25 116 views
0

我有兩個SQL表,項目和里程碑:SQL查詢計數元素

項目PK - > ProID

里程碑組合PK - > ProID和MstNo

出於某種原因,我不能使用ProID作爲外鍵將這兩個錶鏈接在一起(FOREIGN KEY約束)。但是,我需要編寫一個查詢,向我顯示所有項目表記錄的詳細信息,以及每個項目的許多里程碑。我可以使用內部連接來實現嗎?我不擅長編寫SQL查詢。

+0

當您嘗試設置外鍵約束時,遇到什麼樣的錯誤/問題? –

+0

回答你的問題'我可以用內連接來實現嗎?'是'是'。 – Romesh

回答

2

試試這個 -

SELECT 
     P.* 
    , cnt = ISNULL(M.cnt, 0) 
FROM dbo.Projects P 
LEFT JOIN (
    SELECT ProID, cnt = COUNT(1) 
    FROM dbo.Milestones 
    GROUP BY ProID 
) M ON M.ProID = P.ProID 
0

是的,你可以。 inner join將來自一個表的數據與另一個表中的數據匹配。

select * from Projects inner join Milestones on Projects.ProId = Milestones.ProID

該查詢將從Projects表中讀取所有數據,並與Milestones的數據匹配。

在結果中,您將擁有兩個表中都有ProId的實體。

0
SELECT P.ProID , 
     COUNT(M.*) 
FROM Projects P 
     LEFT JOIN Milestones M 
      ON M.ProID = P.ProID 
GROUP BY P.ProID 
0

如果我的表結構,你應該寫類似

SELECT 
    ProID, 
    count(*) as MstNo 
FROM projects 
LEFT JOIN milestones ON projects.ProID=milestones.ProID 
GROUP BY ProID 

更好

SELECT 
    ProID, 
    sum(
    CASE WHEN milestones.ProID is null THEN 0 ELSE 1 END 
) as MstNo 
FROM projects 
LEFT JOIN milestones ON projects.ProID=milestones.ProID 
GROUP BY ProID 

這樣你將有0的項目沒有里程碑計數還