SQL聚合函数,如果只有一个值,则返回单个值,否则为null
我正在寻找实现聚合函数的最佳方法,该函数可实现以下功能:-SQL聚合函数,如果只有一个值,则返回单个值,否则为null,sql,oracle11g,aggregate-functions,Sql,Oracle11g,Aggregate Functions,我正在寻找实现聚合函数的最佳方法,该函数可实现以下功能:- 如果组仅包含一个重复值,则返回该值 如果组包含任何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 V
- 如果组仅包含一个重复值,则返回该值
- 如果组包含任何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');
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弄得一团糟,似乎应该有一个更整洁的方法。这对您的原始数据有效吗
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