查询将一列中的 2 行合并为 1 行和 2 列
Query to merge 2 rows from one column into 1 row with 2 columns
我需要处理查询字符串并从中创建记录。
最初格式是转义字符串,格式如下:
relativeFilePath1^relativeFilePath2^relativeFilePath3^relativeFilePath4
其中 ^ 字符使用 %5E 转义。用于在此位置拆分字符串,创建临时 table,将所有内容插入其中并从那里触发插入。
DECLARE @SplittetList TABLE(ID int Identity(1,1), fPath nvarchar(max));
INSERT INTO @SplittetList SELECT * FROM Schema.fnSplit('relativeFilePath1%5ErelativeFilePath2%5ErelativeFilePath3%5ErelativeFilePath4', '%5E')
--additional processing
现在格式即将更改,以便在每个文件路径之后,还有此文件的附加元数据字段,也用 ^ 字符分隔。如果我现在拆分它,我会得到这样的结果:
ID | fPath
---------------------
1 | relativeFilePath1
2 | metadata1
3 | relativeFilePath2
4 | metadata2
5 | relativeFilePath3
6 | metadata3
n | ...
我怎样才能转换这个列表,以便结果是一组这种格式的数据:
filepath | metadata
----------------------------------
relativeFilePath1 | metadata1
relativeFilePath2 | metadata2
relativeFilePath3 | metadata3
...
DECLARE @Data table
(
ID int identity(1,1),
fPath nvarchar(max)
)
insert @Data values
('relativeFilePath1'),('metadata1'),('relativeFilePath2'),('metadata2'),('relativeFilePath3'),('metadata3')
-- ROW_NUMBER to ensure the ID is continuous
;with data as
(
select *,
(ROW_NUMBER() OVER (ORDER BY Id)+1)/2 as grp,
(ROW_NUMBER() OVER (ORDER BY Id)+1)%2 as columnno
from @Data
)
-- Subquery verison
select
(select fPath from data where grp = d.grp and columnno = 0) as filepath,
(select fPath from data where grp = d.grp and columnno = 1) as metadata
from data d group by grp
-- Inner join version
--select a.fPath, b.fPath from data a inner join data b on a.grp = b.grp
--where a.columnno = 0 and b.columnno = 1
我需要处理查询字符串并从中创建记录。
最初格式是转义字符串,格式如下:
relativeFilePath1^relativeFilePath2^relativeFilePath3^relativeFilePath4
其中 ^ 字符使用 %5E 转义。用于在此位置拆分字符串,创建临时 table,将所有内容插入其中并从那里触发插入。
DECLARE @SplittetList TABLE(ID int Identity(1,1), fPath nvarchar(max));
INSERT INTO @SplittetList SELECT * FROM Schema.fnSplit('relativeFilePath1%5ErelativeFilePath2%5ErelativeFilePath3%5ErelativeFilePath4', '%5E')
--additional processing
现在格式即将更改,以便在每个文件路径之后,还有此文件的附加元数据字段,也用 ^ 字符分隔。如果我现在拆分它,我会得到这样的结果:
ID | fPath
---------------------
1 | relativeFilePath1
2 | metadata1
3 | relativeFilePath2
4 | metadata2
5 | relativeFilePath3
6 | metadata3
n | ...
我怎样才能转换这个列表,以便结果是一组这种格式的数据:
filepath | metadata
----------------------------------
relativeFilePath1 | metadata1
relativeFilePath2 | metadata2
relativeFilePath3 | metadata3
...
DECLARE @Data table
(
ID int identity(1,1),
fPath nvarchar(max)
)
insert @Data values
('relativeFilePath1'),('metadata1'),('relativeFilePath2'),('metadata2'),('relativeFilePath3'),('metadata3')
-- ROW_NUMBER to ensure the ID is continuous
;with data as
(
select *,
(ROW_NUMBER() OVER (ORDER BY Id)+1)/2 as grp,
(ROW_NUMBER() OVER (ORDER BY Id)+1)%2 as columnno
from @Data
)
-- Subquery verison
select
(select fPath from data where grp = d.grp and columnno = 0) as filepath,
(select fPath from data where grp = d.grp and columnno = 1) as metadata
from data d group by grp
-- Inner join version
--select a.fPath, b.fPath from data a inner join data b on a.grp = b.grp
--where a.columnno = 0 and b.columnno = 1