2

アップデート 2 で説明されている解決策がまだ見つかりません

助けてthx

私の下手な英語で私の問題を説明しようとします。誰かが私の問題を解決できることを願っています。

私は次の表を手に入れました

A      B
1      Y
2      null
3      Y

私が望む結果は?列Aのランクに応じて、列Bを結合したい.

その例の結果は...結果がありません理由は、ランク2にnullがあり、次と最後のランク(= 3)に値(= Y)があるためです。

次の例

A      B
1      Y
2      null
3      null

私が望む結果は

A   B
1   Y

後の方法は自由なので... は 2 を意味し、最後の 3 には null があります

もう一つの例

A    B
1    null
2    N
3    null

この場合も結果はありません。first =1 には null 値があるためです。

私は今、結論付けようとしています...列Bのn(たとえば2)の値がYまたはNの場合、(この1の)bevorの要素は値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

4 に答える 4

3

B が Y または N である場合の A の最大値と、B が null である場合の A の最小値を確立します。最初の値が 2 番目の値よりも小さい場合、有効な結果セットが得られます。

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 
/
于 2013-01-31T14:26:40.690 に答える
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
于 2013-01-31T14:18:05.210 に答える
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'
               )
于 2013-01-31T14:14:52.473 に答える
-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
于 2013-01-31T14:19:56.613 に答える