1

同じ行数の2つのテーブルを結合する必要があります。各テーブルには1つの列があります。結合のために参照する接続列はありません。数値が降順で一番上になるように各テーブルが別々にソートされているので、それらを並べて結合する必要があります。

Table Earnersの収入値は、たとえば200Kから0までです。2つのケースを使用して選択することはできません。最初の行の収入が100Kを超えるためですが、2番目の行の最初の20個程度のエントリはNULLです。2番目の行も降順で並べ替えます。

CASE内でORDERBYを使用して検索しましたが、そのようなことはありません。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の両方が降順でソートされ、すべてのNULLが一番下に移動するため、2つのテーブルを結合するために何を参照できますか?

1つのSELECTステートメントと2つのCASEステートメントを使用した前の出力

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

2つの一時表を作成した後に1つのSELECTステートメントを使用して必要な出力

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

これはMicrosoftSQLServer 2008です。私はこれに非常に慣れていないので、できるだけ明確で単純化された答えを与えてください。ありがとうございました。

4

2 に答える 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;
于 2012-04-11T18:44:49.290 に答える
0

テーブルを 2 つに分割し、row_number() を使用して降順で番号を生成すると、row_number でそれらを接続できます。数値がどのように生成されるかに注意してください。row_number の順序は次のとおりです。

; 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  
于 2012-04-11T18:56:57.423 に答える