2016-06-13 49 views
2

我在甲骨文12C兩個表,目的是計算表2中所有出現具有標誌NULL,而且旁邊還顯示0到存在於表1如何統計Oracle中兩個表的發生次數?

table1的

ID,Name 
001,Bob 
009,Alice 
015,Bob 
019,Bob 
026,Alice 
500,Rob 
505,Rob 

表2

名稱
ID,Flag,Timestamp 
001,NULL,02/04/2016 16:33:13,991000 
010,NULL,02/04/2016 16:33:14,991000 
023,NULL,02/04/2016 16:33:15,991000 
019,True,02/04/2016 16:33:16,991000 
026,True,02/04/2016 16:33:17,991000 
500,NULL,02/04/2016 16:33:18,991000 
505,NULL,02/04/2016 16:33:19,991000 

我想獲得

Name,COUNT 
Alice,0 
Bob,1 
Rob,2 

我嘗試到目前爲止是:

SELECT table1.Name, count(table1.Name) AS count 
FROM table2 
LEFT OUTER JOIN table1 
ON table2.ID = table1.ID 
WHERE table2.Flag IS null AND trunc(table2.Timestamp) = TRUNC(SYSDATE) 
GROUP BY table1.Name 

返回

Name,COUNT 
Bob,1 
Rob,2 

回答

2

您需要table2更換的table1位置和計數表2的id列(在不滿足連接條件時排除空值)。

SELECT table1.Name, count(table2.id) AS count 
FROM table1 
LEFT OUTER JOIN table2 
ON table2.ID = table1.ID 
AND table2.Flag IS null 
GROUP BY table1.Name 
+0

謝謝你給它一個嘗試,我明白爲什麼你的解決方案應該工作,但它並沒有爲我工作。也許我已經簡化了我的真實任務,還有一個額外的where子句從今天起限制記錄,不知道爲什麼它應該重要,但在這一點上我完全失去了 – Ninius86

+1

猜測?日期字段在table2上?如果是這樣,左連接的右表中的條件應該只放在on子句中,而不放在where子句中。在裏面加''和table2.datefield = trunc(sysdate)''。 @ ninius86當放置在where子句中時,由於空值比較,聯接變爲內部聯接。 – sagi

1

試試這個:

SELECT table1.Name, count(table2.ID) AS count 
FROM table1 
LEFT OUTER JOIN table2 ON table2.ID = table1.ID 
WHERE table2.Flag IS null 
GROUP BY table1.Name 
+0

我已經試過了,但仍與非零計數想起來的名字 – Ninius86

相關問題