如何组合Y或N或空值

时间:2013-01-31 13:50:07

标签: sql oracle

仍未找到更新2中描述的解决方案

请求帮助

我试着用我糟糕的英语来解释我的问题。希望有人能解决我的问题。

我得到了下表

A      B
1      Y
2      null
3      Y

我想要的结果是什么? 依赖于列A中的排名,我希望将列B组合在一起。

该示例中的结果是......没有结果 原因是因为等级2中存在空值,而下一个等级(= 3)具有值(= Y)。

下一个例子

A      B
1      Y
2      null
3      null

我想要的结果是

A   B
1   Y

因为后面的方式是免费的...意思是2,最后3个是空的

另一个例子

A    B
1    null
2    N
3    null

在这种情况下,再没有结果是我想要的。因为first = 1具有空值。

我现在尝试总结...如果列B的n(例如2)具有值Y或N,则元素bevor(在此1中)必须具有值Y或N.

非常感谢你。我尝试了不同的技术而没有任何成功......

更新1 谢谢你快速评论

一些具有预期结果的示例日期

example 1
A   B
1   Y
2   N
3   null
4   null

expected result
A    B
2    N

example 2
A   B
1   N
2   Y
3   N
4   null

expected result
A   B
3   N

example 3
A   B
1   null
2   Y
3   Y
4   null

expected result
no result

example 4
A   B
1   Y
2   Y
3   null
4   Y

expected result
no result

更新2

忘记基本情况

A   B
1   Y
2   N
3   Y

预期结果

A   B
3   N

4 个答案:

答案 0 :(得分:3)

确定A的最高值,其中B是Y或N,以及A的最低值,其中B为空。如果第一个值低于第二个值,则表示您具有有效的结果集。

select yt.A 
       , yt.B
from 
    ( select max(case when B is not null then A else null end) as max_b_yn
             , min(case when B is null then A else null end) as min_b_null
      from your_table ) t1 
   , your_table yt
where ( t1.min_b_null is null 
        or t1.max_b_yn < t1.min_b_null )
and yt.A = t1.max_b_yn 
/

答案 1 :(得分:0)

我认为你想要第一个NULL之前的最后一行。如果这是正确的,那么以下内容将获得您想要的内容:

 select t.*
 from t join
      (select min(A) as NullA from t where B is NULL) t2
      on t.A = t2.NullA - 1
啊,我明白了。要获得带有“N”的最后一行:

 select t.*
 from t
 where t.A in (select max(A) as MaxA
               from t join
                    (select min(A) as NullA from t where B is NULL) t2
                    on t.A < t2.NullA
                where t.B = 'N'
               )

答案 2 :(得分:0)

好的,我想我有你需要的东西。只要没有在其前面有NULL的行,它就会抓取B列中具有值的最后一行。

select MAX(A), B
from table_a
where B IS NOT NULL
and table_a.A > (
          select MIN(A)
          FROM table_a
          WHERE B IS NULL
         )
Group by B

答案 3 :(得分:-3)

select top 1 A, B
from #Temp
where B is not null
order by A desc

select top 1 A, B
from #Temp
where B = 'N'
order by A desc