1

ORACLEにこのようなテーブルがあります

a     b
--   --
1000   1
100    2
10     3
1      4

私の他のテーブルには、たとえば数字と呼ばれる列に「67」や「112」などの数字があります。これらの値を使用してこのテーブルに参加し、>=1000 が 1、>= 100 が 2、>=10 が 3 などの正しい結果を得るにはどうすればよいですか?

私はやってみました

select g.b
from table o
join table2 g on o.column >= g.a

これを行うと、1002 が g の値であると言うと、これらの結果が返されます。1 2 3 4

1だけ欲しいとき

4

2 に答える 2

2

行 1 = 1000,9999,1 および行 2 = 100,999,2 などのように、ルックアップ テーブルに 1 つの数値ではなく範囲がある場合が最も簡単です。その場合、結合は次のようになります。

SELECT OtherTable.n, lookup.b
from OtherTable
LEFT JOIN lookup on OtherTable.n between lookup.low and lookup.high

ただし、元のテーブルを本当に使用したい場合は、SQL Server で次のようにします。

/*CREATE TABLE #A (a int,b int)
INSERT INTO #A VALUES (1000,1),(100,2),(10,3),(1,4)

CREATE TABLE #B (n INT)
INSERT INTO #B VALUES (67),(112),(4),(2001)
*/
SELECT B.n,  A1.b
FROM #B B OUTER APPLY (SELECT TOP 1 a,b FROM #A A WHERE A.a<B.n ORDER BY A.a DESC) A1
于 2013-03-29T02:12:59.387 に答える
1

サブクエリを使用してMAX列 a を取得し、同じテーブルに再結合して b を取得する1 つの方法を次に示します。

select t.numericvalue, t2.b
from (
  select t.numericvalue, max(t2.a) maxb
  from table1 t
    join table2 t2 on t.numericvalue >= t2.a
  group by numericvalue
  ) t join table2 t2 on t.maxb = t2.a

SQL フィドルのデモ

于 2013-03-29T02:19:42.480 に答える