Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Select语句上的不同记录ORACLE-SQL_Sql_Oracle_Select - Fatal编程技术网

Select语句上的不同记录ORACLE-SQL

Select语句上的不同记录ORACLE-SQL,sql,oracle,select,Sql,Oracle,Select,除了下表中的一个字段(即字段2)外,我有一个可能有重复记录的表。字段1是联接表的键 Field1 Field2 Field3 aa T qqq aa F qqq bb F eee cc T rrr 现在在字段2中,如果T和F都在同一个字段1中,我想选择带有T的行作为字段2的值。 如果只有T或F可用,我想要那个记录。 所以Select语句的输出应该是 Field1 Field2 Fie

除了下表中的一个字段(即字段2)外,我有一个可能有重复记录的表。字段1是联接表的键

Field1  Field2  Field3
  aa      T       qqq
  aa      F       qqq
  bb      F       eee
  cc      T       rrr
现在在字段2中,如果T和F都在同一个字段1中,我想选择带有T的行作为字段2的值。 如果只有T或F可用,我想要那个记录。 所以Select语句的输出应该是

Field1  Field2  Field3
  aa      T      qqq
  bb      F      eee
  cc      T      rrr
如果有有效的方法,请帮助我。

试试这个

select col1,MAX(col2) as Col2,Max(Col3) as Col3 from Employee group by Col1
如果试图通过选择多列在一列中使用distinct,则应使用
Max()
Min()
获取值

你会发现这里的问题是

col1  col2    col3
aa     T      qqq 
aa     F      zzz 
在这种情况下,
MAX(col3)
将是
zzz
而不是
qqq

在这种情况下,您必须根据需要在
Max()
Min()
之间进行选择

用小提琴找到你的解决方案

希望这有帮助

试试这个

select col1,MAX(col2) as Col2,Max(Col3) as Col3 from Employee group by Col1
如果试图通过选择多列在一列中使用distinct,则应使用
Max()
Min()
获取值

你会发现这里的问题是

col1  col2    col3
aa     T      qqq 
aa     F      zzz 
在这种情况下,
MAX(col3)
将是
zzz
而不是
qqq

在这种情况下,您必须根据需要在
Max()
Min()
之间进行选择

用小提琴找到你的解决方案

希望这有帮助

试试这个

select col1,MAX(col2) as Col2,Max(Col3) as Col3 from Employee group by Col1
如果试图通过选择多列在一列中使用distinct,则应使用
Max()
Min()
获取值

你会发现这里的问题是

col1  col2    col3
aa     T      qqq 
aa     F      zzz 
在这种情况下,
MAX(col3)
将是
zzz
而不是
qqq

在这种情况下,您必须根据需要在
Max()
Min()
之间进行选择

用小提琴找到你的解决方案

希望这有帮助

试试这个

select col1,MAX(col2) as Col2,Max(Col3) as Col3 from Employee group by Col1
如果试图通过选择多列在一列中使用distinct,则应使用
Max()
Min()
获取值

你会发现这里的问题是

col1  col2    col3
aa     T      qqq 
aa     F      zzz 
在这种情况下,
MAX(col3)
将是
zzz
而不是
qqq

在这种情况下,您必须根据需要在
Max()
Min()
之间进行选择

用小提琴找到你的解决方案


希望对您有所帮助

您可以使用分析函数为
字段2的值指定排名编号

select Field1,  Field2,  Field3 from (
    select Field1
            ,  Field2
            ,  Field3 
            , row_number() over (partition by Field1,  Field3 
                                 order by Field2 desc) rn
    from your_table
    )  
where rn = 1
/

此实现假定反向字母排序将根据您的需要生成正确的顺序。如果您有一个更复杂的优先级排序方案,则需要使用CASE或DECODE应用某种转换。

您可以使用分析函数为
字段2的值分配一个排名号

select Field1,  Field2,  Field3 from (
    select Field1
            ,  Field2
            ,  Field3 
            , row_number() over (partition by Field1,  Field3 
                                 order by Field2 desc) rn
    from your_table
    )  
where rn = 1
/

此实现假定反向字母排序将根据您的需要生成正确的顺序。如果您有一个更复杂的优先级排序方案,则需要使用CASE或DECODE应用某种转换。

您可以使用分析函数为
字段2的值分配一个排名号

select Field1,  Field2,  Field3 from (
    select Field1
            ,  Field2
            ,  Field3 
            , row_number() over (partition by Field1,  Field3 
                                 order by Field2 desc) rn
    from your_table
    )  
where rn = 1
/

此实现假定反向字母排序将根据您的需要生成正确的顺序。如果您有一个更复杂的优先级排序方案,则需要使用CASE或DECODE应用某种转换。

您可以使用分析函数为
字段2的值分配一个排名号

select Field1,  Field2,  Field3 from (
    select Field1
            ,  Field2
            ,  Field3 
            , row_number() over (partition by Field1,  Field3 
                                 order by Field2 desc) rn
    from your_table
    )  
where rn = 1
/

此实现假定反向字母排序将根据您的需要生成正确的顺序。如果有更复杂的优先级排序方案,则需要使用CASE或DECODE应用某种转换。

在此查询中,如果不是,则指定0

这样,如果有一个“T”将始终首先出现

我唯一的假设是,对于每个Col1,“T”和“F”都显示为1或更少请告诉我这是否正确


在此查询中,如果为“T”,则指定0

这样,如果有一个“T”将始终首先出现

我唯一的假设是,对于每个Col1,“T”和“F”都显示为1或更少请告诉我这是否正确


在此查询中,如果为“T”,则指定0

这样,如果有一个“T”将始终首先出现

我唯一的假设是,对于每个Col1,“T”和“F”都显示为1或更少请告诉我这是否正确


在此查询中,如果为“T”,则指定0

这样,如果有一个“T”将始终首先出现

我唯一的假设是,对于每个Col1,“T”和“F”都显示为1或更少请告诉我这是否正确


根据您的要求,我将使用:

select 
   Field1,  
   max(Field2) as Field2,
   max(Field3) keep(dense_rank first order by Field2 desc) as Field3
from 
   table
group by 
   Field1;

第三列函数获取字段2对应的行。

对于您的需求,我将使用:

select 
   Field1,  
   max(Field2) as Field2,
   max(Field3) keep(dense_rank first order by Field2 desc) as Field3
from 
   table
group by 
   Field1;

第三列函数获取字段2对应的行。

对于您的需求,我将使用:

select 
   Field1,  
   max(Field2) as Field2,
   max(Field3) keep(dense_rank first order by Field2 desc) as Field3
from 
   table
group by 
   Field1;

第三列函数获取字段2对应的行。

对于您的需求,我将使用:

select 
   Field1,  
   max(Field2) as Field2,
   max(Field3) keep(dense_rank first order by Field2 desc) as Field3
from 
   table
group by 
   Field1;

第三列函数获取字段2对应的行。

这是另一个函数,根据
Col2
Col1
获取
Col3
值,而不考虑列中的
Max()
Min()

select col1, MAX(col2) as Col2 , 
(select top 1 col3 from Employee as E where E.Col1=Employee.Col1 and 
E.col2 = max(Employee.Col2) order by col3) as Col3 
from Employee 
group
by Col1

在Fiddle中找到解决方案这是另一个根据
Col2
Col1
获得
Col3
值的解决方案,而不考虑列中的
Max()
Min()

select col1, MAX(col2) as Col2 , 
(select top 1 col3 from Employee as E where E.Col1=Employee.Col1 and 
E.col2 = max(Employee.Col2) order by col3) as Col3 
from Employee 
group
by Col1

在Fiddle中找到解决方案这是另一个根据
Col2
Col1
获得
Col3
值的解决方案,而不考虑列中的
Max()
Min()

select col1, MAX(col2) as Col2 , 
(select top 1 col3 from Employee as E where E.Col1=Employee.Col1 and 
E.col2 = max(Employee.Col2) order by col3) as Col3 
from Employee 
group
by Col1

在Fiddle中找到解决方案这是另一个根据
Col2
Col1
获得
Col3
值的解决方案,而不考虑列中的
Max()
Min()

select col1, MAX(col2) as Col2 , 
(select top 1 col3 from Employee as E where E.Col1=Employee.Col1 and 
E.col2 = max(Employee.Col2) order by col3) as Col3 
from Employee 
group
by Col1
用小提琴找到解决方案

我喜欢你的答案,但是