Вы можете изначально создать фиктивный столбец и создать cte.
Затем используйте cte и соедините их на фиктивной клавише и номере строки или серии, которая имитирует последовательные числа.
Затем отфильтруйте набор данных, чтобы отобразить только нечетные строки
create table dbo.test
(
id integer,
currdate varchar(20), -- just to keep simple, not to mess with dates, took this as string
productCode varchar(20)
);
insert into test values (1, '1/1/2009', 'product1');
insert into test values (2, '2/2/2009', 'product2');
insert into test values (3, '3/3/2009', 'product3');
insert into test values (4, '4/4/2009', 'product4');
insert into test values (5, '5/5/2009', 'product5');
with ctes as
(
select
't' as joinKey,
id, -- serves as rownum or else create another using row_num() over partition by and order by
currdate,
productCode
from test
)
select
c1.id,
c1.currdate,
c1.productCode,
c2.id,
c2.currdate,
c2.productCode
from
(
select
joinKey,
id,
currdate,
productCode
from
ctes
)c1,
(
select
joinKey,
id,
currdate,
productCode
from
ctes
)c2
where c1.joinKey = c2.joinKey
and c1.id + 1 = c2.id
and c1.id % 2 = 1
Результат показан ниже:
id currdate productCode id currdate productCode
1 1/1/2009 product1 2 2/2/2009 product2
3 3/3/2009 product3 4 4/4/2009 product4