oracle 能否在select语句中计算某行的列数

ltskdhd1  于 2023-01-16  发布在  Oracle
关注(0)|答案(1)|浏览(155)

我正在尝试计算某行中所有已填充的列。可以吗?
例如:

我想从3号开始数,只数填满的列。

s5a0g9ez

s5a0g9ez1#

您可以使用NVL2函数来检查某列是"已填充"(非NULL)还是"未填充"(NULL),然后将每列的值相加:

SELECT NVL2(column3, 1, 0)
       + NVL2(column4, 1, 0)
       + NVL2(column5, 1, 0)
       + NVL2(column6, 1, 0)
       + NVL2(column7, 1, 0)
       -- ...
       + NVL2(column42, 1, 0) AS number_of_non_null_columns
FROM   table_name

其中,对于示例数据:

CREATE TABLE table_name (
  column1,
  column2,
  column3,
  column4,
  column5,
  column6,
  column7,
  /* ... */
  column42
) AS
SELECT 1, 1, 1, 1, 1, 1, 1, /* ... */ 1 FROM DUAL UNION ALL
SELECT 2, 2, 2, 2, 2, NULL, 1, /* ... */ 1 FROM DUAL UNION ALL
SELECT 3, 3, 3, 3, 3, NULL, NULL, /* ... */ 1 FROM DUAL UNION ALL
SELECT 4, 4, NULL, NULL, NULL, NULL, NULL, /* ... */ NULL FROM DUAL;

输出:
| 非空列数|
| - ------|
| 六个|
| 五个|
| 四个|
| 无|

  • db〈〉小提琴here *

相关问题