2012-10-31 37 views
2

我有兩個數據庫,我要比較一個案例出現的次數。基於動態標準的多次計數

TAB1:

ID  Sequence 
A2D 1 
A2D 2 
A2D 3 
A3D 1 

TAB2:現在

ID  Sequence 
A2D 1 
A2D 2 
A3D 1 
A3D 2 

,在這個例子中,我試圖得到這樣的結果:

ID  Table1  Table2 
A2D 3   2 
A3D 1   2 

我嘗試了這些代碼,而無需任何成功:

SELECT R1.ID as ID, COUNT(R1.ID) as Table1, 
COUNT(R2.ID) as Table2 
FROM TAB1 AS R1, TAB2 AS R2 
WHERE R1.ID = R2.ID 
GROUP BY R1.ID 

這個人給我的錯計數值...

而且,這只是一個崩潰:

select 
    ( 
    select count(*) as Table1 
    from TAB1 
    where ID = R1.ID 
    ),(
     select count(*) as Table2 
     from TAB2 
     where ID= R1.ID 
    ) 
FROM TAB1 AS R1 

正如你所看到的,雖然,我想有我的標準是動態的。我發現的大多數例子都包含基本的硬編碼標準。但對於我的情況,我希望查詢查看我的第一個表ID,計算其出現的時間量,對具有相同ID的第二個表執行此操作,然後轉到下一個ID。

如果我的問題缺乏信息或令人困惑只是問我,我會盡我所能來更精確。

在此先感謝!

+0

什麼是R1和R2?表?在表格定義中我沒有看到「Builder」作爲字段。這些表也在不同的數據庫中嗎?或者它們是否都在同一個數據庫中?你必須澄清你的問題,讓我們有任何真正的幫助。 –

+0

對不起,我爲了保密的目的必須更改我的表格和字段名稱和數據。 Builder是我的例子中的「ID」,我會進行更正。兩個表都在同一個Access數據庫中。 – Estarius

回答

0

我在這裏使用UNION ALL的子查詢

SELECT ID, SUM(T1) AS Table1, SUM(T2) AS Table2 
FROM 
    (SELECT ID, COUNT(ID) AS T1,   0 AS T2 FROM TAB1 GROUP BY ID 
    UNION ALL 
    SELECT ID,   0 AS T1, COUNT(ID) AS T2 FROM TAB2 GROUP BY ID) 
GROUP BY ID 
HAVING SUM(T1)>0 AND SUM(T2)>0 
+0

當我看到我的測試用例時,我得到了正確的結果,但是我得到51k結果而不是從TAB1需要的30.7k – Estarius

+0

我不能看到你表發生了什麼事情。我建議你只是查詢'TAB1'來看看會發生什麼。 'SELECT ID,COUNT(ID)AS T1 FROM TAB1 GROUP BY ID'。 –

+0

這將返回TAB1的正確結果。但有一點需要注意,TAB1有30.7k數據,但TAB2有53k。我只需要得到那些在TAB1和TAB2中的計數 – Estarius

0

不知道如果我理解你的問題,但你可以嘗試這樣的事:

SELECT DISTINCT t.ID, 
     (SELECT COUNT(ID) FROM R1 WHERE ID = t.ID) AS table1, 
     (SELECT COUNT(ID) FROM R2 WHERE ID = t.ID) AS table2 
FROM table1 t 
+0

不幸的是,序列有洞如1,2,6,7 ... – Estarius

+0

不知道這是否會在這樣的查詢重要。你能詳細說明一下嗎? – dmarra

+0

那麼,如果數據有4個序列,但命名爲1,2,6,7我想知道有4個序列。但是,您的查詢將返回7 – Estarius

0

我用了不同的方法,但不幸的是我不得不使用兩個查詢,我仍然不知道它們是否可以組合在一起。第一個就是製作兩個表的總和,並結合結果:

SELECT "Tab1" AS [Table], Tab1.ID, Count(*) AS Total 
FROM Tab1 
GROUP BY "Tab1", Tab1.ID 
UNION SELECT "Tab2" AS [Table], Tab2.ID, Count(*) AS Total 
FROM Tab2 
GROUP BY "Tab2", Tab2.ID 

,而且由於Access支持透視查詢,您可以使用此:

TRANSFORM Sum(qrySums.[Total]) AS Total 
SELECT qrySums.[ID] 
FROM qrySums 
GROUP BY qrySums.[ID] 
PIVOT qrySums.[Table]; 
0

爲了得到想要的結果,我將它分解爲兩個子查詢(R1SQ和R2SQ)和一個主UNION查詢 - R1R2,它使用內部,左側和右側連接來包括所有行條目,包括那些不出現在兩個表中的行:

R1SQ

SELECT R1.Builder, Count(R1.Builder) AS Table1 
FROM R1 
GROUP BY R1.Builder; 

R2SQ

SELECT R2.Builder_E, Count(R2.Builder_E) AS Table2 
FROM R2 
GROUP BY R2.Builder_E; 

R1R2

SELECT R1SQ.Builder, R1SQ.Table1, R2SQ.Table2 
FROM R1SQ INNER JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E 
UNION 
SELECT R1SQ.Builder, R1SQ.Table1, 0 AS Table2 
FROM R1SQ LEFT JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E 
WHERE (((R2SQ.Builder_E) Is Null)) 
UNION 
SELECT R2SQ.Builder_E, 0 AS Table1, R2SQ.Table2 
FROM R1SQ RIGHT JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E 
WHERE (((R1SQ.Builder) Is Null)) 
ORDER BY R1SQ.Builder;