Microsoft SQL Server 2012 объединяет данные ровно двух соседних строк в одну. - PullRequest
1 голос
/ 09 июля 2020

текущее состояние таблицы #master:

current state of table

I've been trying to formulate a SELECT query to achieve following by picking Value column of exactly two adjecent rows and then placing it on a single row in two columns.

предполагаемый результат

Мое решение на данный момент:

клонировать главную таблицу.

  1. Выбрать значение первой строки из главной таблицы.

  2. Затем присоединитесь к главной таблице с клоном по идентификатору и выберите значение из +1 увеличенного идентификатора ...

  3. Пропустить следующий идентификатор от мастера

  4. повторяйте шаги 1-3 до конца главной таблицы

     select *
    into #clone
    from #master
    
    
    Select Value AS Value1 from #master
           Value AS Value2 from #clone  
    inner join #clone
      ON #master.Id /*(incremented id)*/ = #clone.Id /*(incremented id)*/
    -- skip the next id of #master```
    
    
    

зависает при инкременте и пропускает следующую часть идентификатора в # главной таблице ...

1 Ответ

1 голос
/ 09 июля 2020

Для создания таблицы и вставки некоторых значений

create table mastertable
(
id int,
Name varchar(20),
ParentID int,
Value varchar(50)
)

insert into mastertable values(86, 'Description1',83,'021541-sds2-45515')
insert into mastertable values(87, 'value1',83, '$247.56')
insert into mastertable values(90, 'Description3',83, '021541-sds2-45567')
insert into mastertable values(91,'value3',83, '$66.72')
insert into mastertable values(94, 'Description5',83, '021541-sd72-47715')
insert into mastertable values(95,'value5',83, '$57.11')

Теперь попробуйте следующий запрос:

with m1 as
(
SELECT *, RN = ROW_NUMBER() OVER (order by id) FROM mastertable
),
m2 as
(
SELECT *, RN = ROW_NUMBER() OVER (order by id) FROM mastertable
)

SELECT m1.id, m1.name, m1.parentid, m1.value as value1, m2.value as value2
FROM  m1 left join  m2
ON m1.RN = m2.RN-1
WHERE  m1.RN%2 != 0

EDIT: Для m2 вместо SELECT * вы также можете использовать:

m2 as
(
SELECT id,value, RN = ROW_NUMBER() OVER (order by id) FROM mastertable
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...