2015-08-27 17 views
2

設置一個記錄,我有以下代碼如何記錄從不同的表合併成數

SELECT 
    dbo.tbl1.RecId, dbo.tbl1.CertType, 
    COUNT(dbo.tbl2.CertType) AS Quantity 
FROM 
    dbo.tbl3 
INNER JOIN 
    dbo.tbl2 ON dbo.tbl3.RequestNo = dbo.tbl2.RequestNo 
RIGHT OUTER JOIN 
    dbo.tbl1 ON dbo.tbl2.CertType = dbo.tbl1.RecId 
GROUP BY 
    dbo.tbl1.RecId, dbo.tbl1.CertType 

,並返回這個結果:

RecId CertType Quantity 
1  Clearance   4 
2  Permit   0 

它只能從tbl3但我計數數量希望它也可以計算從tbl4的記錄,但只是不知道如何爲其添加代碼。

注:tbl4tlb3具有相同的格式。謝謝你的幫助。

我想要的結果就像這樣:

RecId CertType Quantity 
1  Clearance   4 
2  Permit   2 
+1

在您的聲明中將'dbo.tbl3'更改爲'dbo.tbl4'。 –

+0

@KarthikeyanVaithilingam是的,但它只會計算tbl4中的記錄數。我想要的是統計兩個表的記錄並將它放在數量字段中。 –

+0

請查看http://dba.stackexchange.com/questions/73053/combining-count-queries-into-one-table-row –

回答

0

在這種情況下,over條款將是有益的。在MSDN page的適當部分中有一個示例,該示例使用計數命令。你的情況應該是這樣的:

SELECT 
    t.RecId, t.CertType, 
    COUNT(t.CertType) over (partition by t.RecId) AS Quantity 
FROM 
    (SELECT dbo.tbl1.RecId, dbo.tbl1.CertType 
    FROM 
     dbo.tbl3 
     INNER JOIN dbo.tbl2 ON dbo.tbl3.RequestNo = dbo.tbl2.RequestNo 
     RIGHT OUTER JOIN dbo.tbl1 ON dbo.tbl2.CertType = dbo.tblBasicPermitFeeSchedule.RecId 
    UNION 
    SELECT dbo.tbl1.RecId, dbo.tbl1.CertType 
    FROM   
     dbo.tbl4 
     INNER JOIN dbo.tbl2 ON dbo.tbl4.RequestNo = dbo.tblRequests.RequestNo 
     RIGHT OUTER JOIN dbo.tbl1 ON dbo.tbl2.CertType = dbo.tbl1.RecId) t 
GROUP BY 
    t.RecId, t.CertType 

或類似的東西。我還沒有測試過,所以可能會有點不同。

讓我知道,如果有什麼不清楚。

+0

我試過了,但得到了這個錯誤:列'dbo.tbl2.CertType'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。另外我認爲它不能計算tbl4中的數量,因爲它的FROM子句只調用tbl3。 –

+0

我根據你的其他答案修改了查詢,其中似乎記錄分別針對tbl3和tbl4進行計數。這個查詢應該合併答案並統計它們全部(對於tbl3和tbl4)。檢查它是否適合您的需求。 –

0

我想我得到了適合我的這個解決方案。

SELECT dbo.tbl1.RecId, dbo.tbl1.CertType, 
COUNT(dbo.tbl2.RequestNo) AS Quantity 
FROM   dbo.tbl3 INNER JOIN 
     dbo.tbl2 ON dbo.tbl3.RequestNo = dbo.tbl2.RequestNo 
     RIGHT OUTER JOIN 
     dbo.tbl1 ON dbo.tbl2.CertType = dbo.tblBasicPermitFeeSchedule.RecId           

GROUP BY dbo.tbl1.RecId, dbo.tbl1.CertType 

UNION 
SELECT dbo.tbl1.RecId, dbo.tbl1.CertType, 
COUNT(dbo.tbl2.RequestNo) AS Quantity 
FROM   dbo.tbl4 INNER JOIN 
     dbo.tbl2 ON dbo.tbl4.RequestNo = dbo.tblRequests.RequestNo 
     RIGHT OUTER JOIN 
     dbo.tbl1 ON dbo.tbl2.CertType = dbo.tbl1.RecId           

GROUP BY dbo.tbl1.RecId, dbo.tbl1.CertType 

感謝您的所有想法。