これを行う集計関数を実現する最良の方法を探しています:-
- グループに繰り返される値が 1 つしか含まれていない場合は、その値を返します
- グループに null が含まれている場合は、null を返します
- グループに複数の値が含まれている場合は、null を返します
サンプルデータは次のとおりです。
CREATE TABLE EXAMPLE
( ID NUMBER(3),
VAL VARCHAR2(3));
INSERT INTO EXAMPLE VALUES (1,'A');
INSERT INTO EXAMPLE VALUES (2,'A');
INSERT INTO EXAMPLE VALUES (2,'B');
INSERT INTO EXAMPLE VALUES (3,null);
INSERT INTO EXAMPLE VALUES (3,'A');
INSERT INTO EXAMPLE VALUES (4,'A');
INSERT INTO EXAMPLE VALUES (4,'A');
SQL は次のようになります。
SELECT ID, ????( VAL ) ONLY_VAL
FROM EXAMPLE
GROUP BY ID
ORDER BY ID
私が求めている結果は次のようになります:-
ID ONLY_VAL
1 A
2
3
4 A
VAL
実際には、これを複数の列 (同じ でグループ化)で実行したいと考えていますID
。ごとに数百のレコードがありますID
。
これは興味深い問題だと思いました。私が持っている唯一の解決策は、NVL、MIN、MAX の混乱であり、もっときちんとした方法があるはずです。