我正在寻找实现此功能的聚合函数的最佳方法: -
以下是一些示例数据:
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,看起来应该有一个更简洁的方式。
答案 0 :(得分: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