2016-06-13 6 views
2

私は、Oracle 12cに2つのテーブルを持っているが、目標は旗NULLを持つtable2の中のすべての発生をカウントするだけでなく、TABLE1Oracleの2つのテーブルで出現を数える方法は?

TABLE1

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

table2の

に存在している名前の横に0を表示することです
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 

私の試みはこれまでのところです:あなたはtable2table1の位置を交換する必要が

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 

答えて

2

をし、表2のid列を数える:

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 
+0

感謝を名前だけを取得してきた、あなたのソリューションが動作するはずですなぜ私が見たが、それは私のために動作しません。たぶん私は本当の仕事を単純化しすぎてしまったのですが、今日だけからレコードを制限する追加の句がありますが、なぜそれが重要かはわかりませんが、この時点で私は完全に失われています – Ninius86

+1

でしょうか?日付フィールドはtable2の右側にありますか?その場合、左結合の右表の条件は、where節ではなくon節内にのみ配置する必要があります。そこに 'とtable2.datefield = trunc(sysdate)'を追加してください。 @ninius86 where句に配置すると、NULL値の比較のために結合が内部結合に変わります。 – sagi

1

を返します(結合条件が満たされていない場合はNULL値を除外する)。

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

私はそれを試してみましたが、それでも非ゼロカウントでそれを試しを与えるための – Ninius86

関連する問題