我有一张如下表:
p_id | 中 | 1_m_ret | 2_m_ret | 3_m_ret | 4_m_ret | 5_m_ret |
---|---|---|---|---|---|---|
p_1 | 米_1 | 空值 | 1.1 | 3.1 | 空值 | 5.5 |
p_1 | m_2 | 1.23 | 2.5 | 3.6 | 3.3 | 1.5 |
p_1 | m_3 | 1.10 | 1.6 | 3.5 | 1.8 | 3.2 |
我想将基于 p_id 的列的值更改为 NULL 如果 p_id 的列中有任何 NULL 并且结果如下表所示:
p_id | 中 | 1_m_ret | 2_m_ret | 3_m_ret | 4_m_ret | 5_m_ret |
---|---|---|---|---|---|---|
p_1 | 米_1 | 空值 | 1.1 | 3.1 | 空值 | 5.5 |
p_1 | m_2 | 空值 | 2.5 | 3.6 | 空值 | 1.5 |
p_1 | m_3 | 空值 | 1.6 | 3.5 | 空值 | 3.2 |
我能够在本地使用自定义函数和存储过程来实现这一点。但是我需要使用 CTE(没有函数或存储过程)来实现它,有什么建议吗?
你的问题可能需要澄清一点,但我想我明白了。如果 p_id 的列中有任何 NULL,则您希望该列在 p_id 的任何地方都为 NULL。否则,就保持原样。
所以如果这是准确的,试试这个:
CASE WHEN FIRST_VALUE(1_m_ret) OVER (PARTITION BY p_id ORDER BY 1_m_ret ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) IS NULL THEN NULL ELSE 1_m_ret END
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句