0

私はこのテーブルを持っています:

A   B          C
1   Record 1   Type 1
2   Record 2   Type 2
3   Record 3   Type 1
4   Record 4   Type 2

最初のレコードが最も近いレコードと一致する必要があるため、 C(タイプ 1 とタイプ 2)の値で行をペアにする必要があります。Type 1IDType 2

望ましい出力:

A   B         C        A   B         C
1   Record 1  Type 1   2   Record 2  Type 2
3   Record 3  Type 1   4   Record 4  Type 2

2 つの CTE を使用したクエリでこれを実行しようとしましたが、期待どおりの結果が得られませんでした。

WITH SET_A (A, B, C) AS

    (SELECT * FROM A WHERE C = 'Type 1'),

SET_B (A, B, C) AS
    (SELECT * FROM A WHERE C = 'Type 2')

SELECT * FROM SET_A CROSS JOIN SET_B;   

クロス結合を使用する以外の方法はありますか?

4

3 に答える 3

1

どうぞ。「タイプ 1」ごとに、(ID によって) 最も近い後続の「タイプ 2」が検索されます。

http://sqlfiddle.com/#!6/a5263/20

CREATE TABLE t 
(
  A int,
  B varchar(32),
  C varchar(32)
  );



insert into t values (1, 'Record 1', 'Type 1')
insert into t values (2, 'Record 2', 'Type 2')
insert into t values (3, 'Record 3', 'Type 1')
insert into t values (4, 'Record 4', 'Type 2')
insert into t values (5, 'Record 5', 'Type 1')
insert into t values (6, 'Record 6', 'Type 1a')
insert into t values (7, 'Record 7', 'Type 2')


;

with set_a as 
(
  select * from t where c = 'type 1'
)
, set_b as 
(
  select a, b, c, a_match = (select max(t2.a) from t t2 where t2.a < t.a and t2.c = 'type 1') 
  from t where c = 'type 2'
)
select set_a.* , a2 = set_b.a, b2 = set_b.b, c2 = set_b.c
from set_a
join set_b on set_b.a_match = set_a.a
于 2013-05-21T01:11:16.367 に答える
-1

これを試してみてください

SELECT * FROM yourtable t1, yourtable t2 WHERE t1.c=t2.c
于 2013-05-21T00:46:18.677 に答える