2

我正在寻找实现执行此操作的聚合函数的最佳方法:-

  • 如果组仅包含一个重复值,则返回该值
  • 如果该组包含任何空值,则返回空值
  • 如果组包含多个值,则返回 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 回答