Microsoft SQL Server 2012 将恰好相邻两行的数据合并为一行
Microsoft SQL Server 2012 merge data of exactly two adjacent rows into one row
#master 的当前状态 table:
我一直在尝试制定一个 SELECT 查询,通过选择恰好两个相邻行的值列然后将其放在两列中的一行中来实现以下目标。
目前我的解决方案:
克隆主控table。
Select 第一行来自 master 的值 table.
然后加入 master table 和 Id 上的克隆并从 +1 递增的 id 中选择值...
跳过 master 的下一个 Id
重复步骤 1-3 直到 master 结束 table
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```
坚持递增并跳过#master 的下一个 id 部分 table...
用于创建 table 并插入一些值
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, '7.56')
insert into mastertable values(90, 'Description3',83, '021541-sds2-45567')
insert into mastertable values(91,'value3',83, '.72')
insert into mastertable values(94, 'Description5',83, '021541-sd72-47715')
insert into mastertable values(95,'value5',83, '.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
编辑:
对于 m2,除了 SELECT *,您还可以使用:
m2 as
(
SELECT id,value, RN = ROW_NUMBER() OVER (order by id) FROM mastertable
)
#master 的当前状态 table:
我一直在尝试制定一个 SELECT 查询,通过选择恰好两个相邻行的值列然后将其放在两列中的一行中来实现以下目标。
目前我的解决方案:
克隆主控table。
Select 第一行来自 master 的值 table.
然后加入 master table 和 Id 上的克隆并从 +1 递增的 id 中选择值...
跳过 master 的下一个 Id
重复步骤 1-3 直到 master 结束 table
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```
坚持递增并跳过#master 的下一个 id 部分 table...
用于创建 table 并插入一些值
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, '7.56')
insert into mastertable values(90, 'Description3',83, '021541-sds2-45567')
insert into mastertable values(91,'value3',83, '.72')
insert into mastertable values(94, 'Description5',83, '021541-sd72-47715')
insert into mastertable values(95,'value5',83, '.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
编辑: 对于 m2,除了 SELECT *,您还可以使用:
m2 as
(
SELECT id,value, RN = ROW_NUMBER() OVER (order by id) FROM mastertable
)