仍未找到更新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
答案 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