sql - Oracle SQL - Set null on repeating values
问题描述
Please help with below Oracle SQL query:
Tried several ways but didn't get expected results.
Data set:
ORDER_NO ITEM CODE
1234 999999 777
1234 999999 111
1234 999999 777
1234 999999 111
Expected result:
ORDER_NO ITEM CODE
1234 999999 777
111
解决方案
You can try to make row number by ROW_NUMBER
window function in a CTE
, then use CASE WHEN
to make it.
CREATE TABLE T(
ORDER_NO INT,
ITEM INT,
CODE INT
);
INSERT INTO T VALUES (1234,999999,777);
INSERT INTO T VALUES (1234,999999,111);
INSERT INTO T VALUES (1234,999999,777);
INSERT INTO T VALUES (1234,999999,111);
Query 1:
with cteRn as (
SELECT t1.*,ROW_NUMBER() OVER (PARTITION BY ORDER_NO,ITEM,CODE order by ORDER_NO) rn
FROM T t1
), cteGrp as (
SELECT
t1.*,ROW_NUMBER() OVER (PARTITION BY ORDER_NO,ITEM ORDER BY CODE desc) grp
FROM cteRn t1
WHERE rn = 1
)
SELECT
(CASE WHEN grp = 1 then ORDER_NO end) ORDER_NO,
(CASE WHEN grp = 1 then ITEM end) ITEM,
CODE
FROM cteGrp
| ORDER_NO | ITEM | CODE |
|----------|--------|------|
| 1234 | 999999 | 777 |
| (null) | (null) | 111 |
推荐阅读
- intellij-idea - 如何在 IDEA / WebStorm 中生成 JSDoc 文档?
- c# - 声明性自适应对话框不适用于 LUIS 识别器
- angular - 当变量更改时,h2 插值不会更新
- c++ - 在新创建的文件夹中创建新的文本文件
- arrays - 删除 Chart.js 中由 null 值创建的空格
- c - while循环和getchar函数辅助
- python - 如何正确传递 python args 和 docker env?
- android - 任务 ':app:mergeDebugNativeLibs' 执行失败。在本机反应
- spring-batch - 我如何从 Spring Batch 中的 3 个不同的表中读取
- java - 以下哪项描述了 Scanner 方法 nextLine 的返回类型和参数?