2016-06-13 51 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