2012-04-11 1 views
1

同じ数の行を持つ2つのテーブルを結合する必要があります。各テーブルには1つの列があります。結合に参照するCOLUMNは接続されていません。各テーブルは別々にソートされているため、並べて結合する必要があります。そのため、数値が降順で先頭に表示されます。同じ行数で2つのテーブルを結合しますが、NULLにソートしました

テーブルエナーは200Kから0までの所得値を持っています.2つのケースを使用して選択するだけではいけません。なぜなら、100Kを超えるインコムを持つ最初のローを持つからです。ヌル。私は2番目の行も降順ソートしたい。

CASE内でORDER BYを使用して検索しましたが、そのようなことはありません。私はrow_number()について読んでみましたが、例はどれも一致するとは思われません。

drop table #20plus 
select 
    case 
     when Income >= 20000 AND Income < 100000 
     then Income end as 'mula' 
into #20plus 
from Earners 
order by mula desc 


drop table #100plus 
select 
    case 
     when Income >= 100000 
     then Income end as 'dinero' 
into #100plus 
from Earners 
order by dinero desc 

Select A.dinero, B.mula 
FROM #100plus as A JOIN #20plus as B 
ON A.????? = B.????? 

AとBの両方が、私は2つのテーブルを結合するために何を参照することができ、下にすべてのNULLを移動、降順にソートされているので? 2つの一時テーブルを作成した後

2つのCASE文1つのSELECTステートメントを使用して出力を希望

dinero    mula 
2.12688e+007  NULL 
1.80031e+007  NULL 
1.92415e+006  NULL 
…     … 
NULL    93530.7 
NULL    91000 
NULL    84500 

で1つのSELECT文を使用して、前の出力が

dinero   mula 
2.12688e+007 93530.7 
1.80031e+007 91000 
1.92415e+006 84500 
…    82500 
NULL   82000 
NULL   … 
NULL   NULL 

これは、Microsoft SQL Server 2008のです私はスーパーですこれには新しいので、できるだけ明確かつ簡潔に回答してください。ありがとうございました。あなたが二つにあなたのテーブルを分割し、降順で番号を生成するROW_NUMBER()を使用している場合は

+0

メタデータを追加しなければならないと確信していますが、その方法についてはわかりません。リレーショナルデータベースは、実際にはこの問題のために構築されていません。「注文番号」を付けて各テーブルに2番目の列を追加し、それらの列を結合することができます。 –

答えて

0
Select A.dinero, B.mula 
FROM #100plus as A FULL OUTER JOIN #20plus as B 
ON A.dinero = B.mula 
ORDER BY A.dinero,B.mula; 
0

、あなたはROW_NUMBERすることによって、それらを接続することができます。数字がどのように生成されるかに注意してください。 - row_numberにはorder byが与えられます。

; WITH _20plus AS (
    SELECT CASE WHEN income >= 20000 AND income < 100000 
       THEN income 
      END AS Mula, 
      Row_number() OVER (ORDER BY CASE WHEN income >= 20000 AND income 
       < 100000 THEN income END DESC) rn 
     FROM earners 
    ), 
    _100plus AS (
    SELECT CASE WHEN income >= 100000 THEN income 
      END AS Dinero, 
      Row_number() OVER (ORDER BY CASE WHEN income >= 100000 
              THEN income END DESC) rn 
     FROM earners 
) 
SELECT a.dinero, 
     b.mula 
FROM _100plus AS a 
    INNER JOIN _20plus AS b 
     ON a.rn = b.rn 
+0

WITHをどのように使用するのか分かりません(SELECT-INTOと同じですか?)が、ここで何が起こっているのか分かります。私は一時テーブルを使って試してみます。ありがとう。 – VISQL

+0

@VISQL [CTE](http://msdn.microsoft.com/en-us/library/ms190766%28v=sql.90%29.aspx)は、一部は派生テーブルですが、より読みやすい方法で宣言されています。あなたは私が投稿したリンクでCTEをもっと読むことができます。それを使用しない場合は、一時テーブルの代わりに派生テーブル構文を使用します。それは問題の価値がある。 –

+0

ニコラ、それは完璧に働いた。再度、感謝します。 – VISQL

関連する問題