Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL从某些列中删除重复结果_Sql_Oracle - Fatal编程技术网

Oracle SQL从某些列中删除重复结果

Oracle SQL从某些列中删除重复结果,sql,oracle,Sql,Oracle,我的数据在单独的表中有类别和子类别。当我编写一个查询来连接它们时,我得到下表,其中类别行重复出现: | Col1 | Col2 | Col3 | Col 4 | |-------|-----------|------------|-------| | Cat1 | Cat1 Data | Subcat 1.1 | Etc | |-------|-----------|------------|-------| | Cat1 | Cat1 Data | Subca

我的数据在单独的表中有类别和子类别。当我编写一个查询来连接它们时,我得到下表,其中类别行重复出现:

|  Col1 |    Col2   |   Col3     | Col 4 | 
|-------|-----------|------------|-------|
|  Cat1 | Cat1 Data | Subcat 1.1 | Etc   |
|-------|-----------|------------|-------|
|  Cat1 | Cat1 Data | Subcat 1.2 | Etc   |
|-------|-----------|------------|-------|
|  Cat1 | Cat1 Data | Subcat 1.3 | Etc   |
|-------|-----------|------------|-------|
|  Cat2 | Cat2 Data | Subcat 2.1 | Etc   |
|-------|-----------|------------|-------|
|  Cat2 | Cat2 Data | Subcat 2.2 | Etc   |
|-------|-----------|------------|-------|
|  Cat2 | Cat2 Data | Subcat 2.3 | Etc   |
|-------|-----------|------------|-------|
有没有办法让它打印出来,主分类只显示一次

|  Col1 |    Col2   |   Col3     | Col 4 | 
|-------|-----------|------------|-------|
|  Cat1 | Cat1 Data | Subcat 1.1 | Etc   |
|-------|-----------|------------|-------|
|       |           | Subcat 1.2 | Etc   |
|-------|-----------|------------|-------|
|       |           | Subcat 1.3 | Etc   |
|-------|-----------|------------|-------|
|  Cat2 | Cat2 Data | Subcat 2.1 | Etc   |
|-------|-----------|------------|-------|
|       |           | Subcat 2.2 | Etc   |
|-------|-----------|------------|-------|
|       |           | Subcat 2.3 | Etc   |
|-------|-----------|------------|-------|

联机搜索仅返回对使用distinct或groupby的引用,这些引用似乎并不真正适合用例。我知道这里的答案通常是“使用前端工具”,但在我的情况下,这不是真正的选项。

您好,这似乎是您想要的

数据(DDL)

SQL查询(答案)


你最好还是重复一遍。但是,您可以使用
行编号()

请注意,
用于指定顺序的列,即定义每行“第一个”的内容


在外部查询中包含order by非常重要。SQL结果集(如表)是无序的。如果没有order by,可以按任何顺序返回行,但在这种情况下,排序很重要。

有趣的解决方案。顺便说一下,看起来可以省略按null划分的
分区
create table example(
   col1 varchar(100),
   col2 varchar(100),
   col3 varchar(100),
   col4 varchar(100)
);

insert into example(col1,col2,col3,col4) values('Cat1','Cat1 Data', 'Subcat 1.1', 'Etc');
insert into example(col1,col2,col3,col4) values('Cat1','Cat1 Data', 'Subcat 1.2', 'Etc');
insert into example(col1,col2,col3,col4) values('Cat1','Cat1 Data', 'Subcat 1.3', 'Etc');
insert into example(col1,col2,col3,col4) values('Cat2','Cat2 Data', 'Subcat 2.3', 'Etc');
insert into example(col1,col2,col3,col4) values('Cat2','Cat2 Data', 'Subcat 2.3', 'Etc');
insert into example(col1,col2,col3,col4) values('Cat2','Cat2 Data', 'Subcat 2.3', 'Etc');
select
   CASE WHEN lag(col1) over (partition by null order by col1) = col1 THEN null ELSE col1 END col1,
   CASE WHEN lag(col2) over (partition by null order by col2) = col2 THEN null ELSE col2 END col2,
   col3, col4
From example
select (case when row_number() over (partition by col1, col2 order by ?) = 1
             then col1
        end) as col1
       (case when row_number() over (partition by col1, col2 order by ?) = 1
             then col2
        end) as col2,
       . . .
from t
order by col1, col2, ?;