2013-04-09 113 views
2

我在寻找实现聚合函数,做最好的方法: -SQL聚合函数返回一个值,如果只有一个,否则空

  • 如果该组中只包含一个重复值,返回值
  • 如果组中包含的任何空,则返回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的混乱,它似乎应该有一个整洁的方式。

回答

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 
相关问题