Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL聚合函数,如果只有一个值,则返回单个值,否则为null_Sql_Oracle11g_Aggregate Functions - Fatal编程技术网

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');
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弄得一团糟,似乎应该有一个更整洁的方法。

这对您的原始数据有效吗

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