Oracle SQL-将重复值设置为null
请帮助执行以下Oracle SQL查询: 尝试了几种方法,但没有得到预期的结果 数据集:Oracle SQL-将重复值设置为null,sql,oracle,Sql,Oracle,请帮助执行以下Oracle SQL查询: 尝试了几种方法,但没有得到预期的结果 数据集: ORDER_NO ITEM CODE 1234 999999 777 1234 999999 111 1234 999999 777 1234 999999 111 预期结果: ORDER_NO ITEM CODE 1234 999999 777 111 您
ORDER_NO ITEM CODE
1234 999999 777
1234 999999 111
1234 999999 777
1234 999999 111
预期结果:
ORDER_NO ITEM CODE
1234 999999 777
111
您可以尝试通过
CTE
中的row\u number
窗口函数生成行号,然后在生成行号时使用CASE
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);
查询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 |
:
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 |
您可以尝试通过CTE
中的row\u number
窗口函数生成行号,然后在
生成行号时使用CASE
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);
查询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 |
:
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 |
当您为SQL Developer(在本上下文中可能被认为是应用程序/表示层)标记该层时,您可以使用:
具有多个订单和项目:
with your_table (order_no, item, code) as (
select 1234, 999999, 777 from dual
union all select 1234, 999999, 111 from dual
union all select 1234, 999999, 777 from dual
union all select 1234, 999999, 111 from dual
union all select 1235, 999999, 111 from dual
union all select 1236, 999999, 111 from dual
union all select 1236, 999998, 111 from dual
union all select 1236, 999998, 111 from dual
)
select * from your_table;
ORDER_NO ITEM CODE
---------- ---------- ----------
1234 999999 777
111
777
111
1235 999999 111
1236 999999 111
1236 999998 111
111
当您为SQL Developer(在本上下文中可能被认为是应用程序/表示层)标记该层时,您可以使用:
具有多个订单和项目:
with your_table (order_no, item, code) as (
select 1234, 999999, 777 from dual
union all select 1234, 999999, 111 from dual
union all select 1234, 999999, 777 from dual
union all select 1234, 999999, 111 from dual
union all select 1235, 999999, 111 from dual
union all select 1236, 999999, 111 from dual
union all select 1236, 999998, 111 from dual
union all select 1236, 999998, 111 from dual
)
select * from your_table;
ORDER_NO ITEM CODE
---------- ---------- ----------
1234 999999 777
111
777
111
1235 999999 111
1236 999999 111
1236 999998 111
111
请展示您所尝试的内容。您可以解释此要求背后的逻辑吗?@Aleksej这是一个非常常见的报告要求。许多老式的报告工具都支持它。这里有一个类似的问题,你真的应该在应用层而不是在数据库中这样做。@Gary_W-我正在学习-如果你帮不上忙,那没关系。请展示你的尝试。你能解释一下这个要求背后的逻辑吗?@Aleksej这是一个非常常见的报告要求。许多老式的报告工具都支持它。这里有一个类似的问题,你真的应该在应用层而不是在数据库中这样做。@Gary_W-我在学习-如果你帮不上忙,那没关系。