2

これを行う集計関数を実現する最良の方法を探しています:-

  • グループに繰り返される値が 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 の混乱であり、もっときちんとした方法があるはずです。

4

1 に答える 1

2

これは元のデータに対して機能しますか?

SELECT  ID, 
        CASE WHEN COUNT(DISTINCT VAL) = 1 AND COUNT(ID) = COUNT(VAL)
             THEN MAX(VAL)
             ELSE NULL
        END ONLY_VAL
FROM    EXAMPLE
GROUP   BY ID
ORDER   BY ID
于 2013-04-09T01:20:11.773 に答える