oracle 我想在8列数据中先排除等于0的数据 然后再从这8列数据中随机取一列的数值
时间: 2024-10-11 07:12:56 浏览: 23
在Oracle数据库中,你可以使用SQL查询结合CASE语句和ROW_NUMBER()窗口函数来达到这个目标。首先,你需要对数据进行筛选,只选择不等于0的值,然后通过ROW_NUMBER()生成行号,并根据需求随机选取一列。假设表名为table_name,列名分别为col1, col2, ..., col8,可以尝试以下SQL语句:
```sql
WITH filtered_data AS (
SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY row_number_column ORDER BY DBMS_RANDOM.VALUE(0, 1)) as random_row_num
FROM table_name t
WHERE col1 != 0 AND col2 != 0 AND col3 != 0 AND col4 != 0 AND col5 != 0 AND col6 != 0 AND col7 != 0 AND col8 != 0
)
SELECT *
FROM filtered_data
WHERE random_row_num = 1
```
这里`row_number_column`是你需要指定的一个列,用于在每一组非零数据中生成行号。`DBMS_RANDOM.VALUE(0, 1)`是一个伪随机数生成器,它会返回[0, 1)范围内的随机数。如果想要选取的是第n列(例如1、2、...、8),则将`ORDER BY`替换为`ORDER BY CASE WHEN n=1 THEN col1 ELSE NULL END, ...`。
阅读全文