暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何在所有列中获取唯一值/空白

ASKTOM 2019-10-10
451

问题描述

嗨,

我有一个宽的表,有200奇数列。要求是旋转列并显示每列中的唯一值和空白计数

CREATE TABLE example(
c1 VARCHAR(10),
c2 VARCHAR(10),
c3 VARCHAR(10)
);
/
INSERT INTO example VALUES('abc', '123', 'speed');
INSERT INTO example VALUES('cat', 'crazy', 'no');
INSERT INTO example VALUES('dog', 'yes', 'no');
INSERT INTO example VALUES('dog', 'row', 'no');
INSERT INTO example VALUES(null,null,'no');
commit;
/
复制


结果应采用如下所示的枢轴格式。

    unique    Countofblank 
    -----------------------
c1    4         1                      
c2    5         1                   
c3    2         0                
复制


你能帮忙吗?

谢谢

专家解答

而不是枢轴,它听起来像你想要:

-展开列
-按这些分组以获得计数

注意计数 (distinct) 排除null值。从您的输出看来,您希望将这些包括在您的独特计数中。所以你需要将NULL映射到一些 “不可能” 的值 (例如字符串 “NULL”)。

要获取null,您还需要将它们映射到非null值。以及非null为null :)

这给出了:

CREATE TABLE example(
  c1 VARCHAR(10),
  c2 VARCHAR(10),
  c3 VARCHAR(10)
);
/
INSERT INTO example VALUES('abc', '123', 'speed');
INSERT INTO example VALUES('cat', 'crazy', 'no');
INSERT INTO example VALUES('dog', 'yes', 'no');
INSERT INTO example VALUES('dog', 'row', 'no');
INSERT INTO example VALUES(null,null,'no');
commit;
/
with rws as (
  select * from example
  unpivot include nulls (
    val for col in ( 
      c1, c2, c3
    )
  )
)
  select col, 
         count ( distinct val ) distinct_vals,
         count ( distinct case when val is null then 'NULL' else val end ) distinct_vals_with_null,
         count ( case when val is null then 1 end ) nulls
  from   rws
  group  by col;

CO DISTINCT_VALS DISTINCT_VALS_WITH_NULL      NULLS
-- ------------- ----------------------- ----------
C1             3                       4          1
C2             4                       5          1
C3             2                       2          0
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论