2017-05-29 3 views
0

問題を不適切な方法で枠に入れてお詫びしますが、以下でその問題を明確にしたいと思います。私はサンプルデータとしてテーブルの下に持っている場合、それは私の問題複数のチェックに基づいて値をコピーし、SQLを使用して同じテーブル内の他の行の値を入力する方法

を理解するのに役立つことを願っています:

+-----+-----------+------+ 
| a |  b  | c | 
+-----+-----------+------+ 
| 100 | Apple  | NULL | 
| 100 | Orange | 1.05 | 
| 101 | Apple  | NULL | 
| 102 | Apple  | NULL | 
| 102 | Dont care | NULL | 
| 103 | Apple  | NULL | 
| 103 | Dont care | NULL | 
| 103 | Orange | 1.01 | 
+-----+-----------+------+ 

今私はそれが列B =アップルのためのNULLで列Cの値を記入します。値は、同じ列Aの値の列B =オレンジから取得されます。

また、列Aの特定の値について、列B = Appleが列B =オレンジでない場合、列Cの値(列Aと列Bの特定の値の場合= Apple)には列Cの値が代入されます(列Bがオレンジの列Aの次の昇順の値)。

だから私の出力は、次のようになります。

+-----+-----------+------+ 
| a |  b  | c | 
+-----+-----------+------+ 
| 100 | Apple  | 1.05 | 
| 100 | Orange | 1.05 | 
| 101 | Apple  | 1.01 | 
| 102 | Apple  | 1.01 | 
| 102 | Dont care | NULL | 
| 103 | Apple  | 1.01 | 
| 103 | Dont care | NULL | 
| 103 | Orange | 1.01 | 
+-----+-----------+------+ 

おかげ

+0

dbmsは何ですか? –

+0

@vkp MS SQL。私はSSMS 2014を使用しています。 –

+0

'与えられた列Aに対しては列B =オレンジでなければ、次の列B =オレンジに出会うときに列Cの値を入力する必要があります。 –

答えて

1

をあなたがouter applyでこれを行うことができます。

select t1.a,t1.b 
,case when t1.b='Apple' and t1.c is null then t2.new_c else c end as new_c 
from tbl t1 
outer apply (select top 1 c as new_c 
      from tbl t2 where t2.a>=t1.a and t2.b='Orange' 
      order by a) t2 
関連する問題