私の問題を説明するのに役立つサンプルテーブルを次に示します。
mysql> select * from test;
+----+--------------+--------+
| id | type | siteid |
+----+--------------+--------+
| 1 | First Visit | 100 |
| 2 | Second Visit | 100 |
| 3 | First Visit | 300 |
| 4 | First Visit | 400 |
| 5 | Second Visit | 500 |
| 6 | Second Visit | 600 |
+----+--------------+--------+
テーブルを結合して、同じサイト ID 値を持つ行をまとめようとしています。これが私の試みです:
mysql> select * from test T1
-> LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id <> T2.id;
+----+--------------+--------+------+--------------+--------+
| id | type | siteid | id | type | siteid |
+----+--------------+--------+------+--------------+--------+
| 1 | First Visit | 100 | 2 | Second Visit | 100 |
| 2 | Second Visit | 100 | 1 | First Visit | 100 |
| 3 | First Visit | 300 | NULL | NULL | NULL |
| 4 | First Visit | 400 | NULL | NULL | NULL |
| 5 | Second Visit | 500 | NULL | NULL | NULL |
| 6 | Second Visit | 600 | NULL | NULL | NULL |
+----+--------------+--------+------+--------------+--------+
これは、最初の 2 行を除いて、基本的に私が探している結果です。そのうちの1つをなくしたいと思います。だから、私は次のことを試しました:
mysql> select * from test T1
-> LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id <> T2.id
-> GROUP BY T1.siteid;
+----+--------------+--------+------+--------------+--------+
| id | type | siteid | id | type | siteid |
+----+--------------+--------+------+--------------+--------+
| 1 | First Visit | 100 | 2 | Second Visit | 100 |
| 3 | First Visit | 300 | NULL | NULL | NULL |
| 4 | First Visit | 400 | NULL | NULL | NULL |
| 5 | Second Visit | 500 | NULL | NULL | NULL |
| 6 | Second Visit | 600 | NULL | NULL | NULL |
+----+--------------+--------+------+--------------+--------+
これはまさに私が探している出力です。ただし、これが GROUP BY を使用する標準的な方法ではないことを知り、上記のステートメントは ORACLE で失敗し、
一般的な SQL エラー。
ORA-00979: GROUP BY式ではありません
最後のテーブルのような結果を取得し、ORACLE で動作する方法について誰か助けてもらえますか?