嗨,大家好,我需要在这一个你的帮助:创建基于特定行组列
我需要填充基于一些特定的行在SQL Server中的附加列(目录)。为此,我需要评估列(文件名)并将其复制到列(目录),直到关键字发生更改。所以原来的表是这样的:
而这正是我需要完成:
我可以使用CTE?怎么样?
在此先感谢!
嗨,大家好,我需要在这一个你的帮助:创建基于特定行组列
我需要填充基于一些特定的行在SQL Server中的附加列(目录)。为此,我需要评估列(文件名)并将其复制到列(目录),直到关键字发生更改。所以原来的表是这样的:
而这正是我需要完成:
我可以使用CTE?怎么样?
在此先感谢!
如果directory
命名格式为您的样本数据一致,那么这里是一个办法
SELECT id,Filename,
Directory = Min(Filename)OVER(partition BY grp)
FROM (SELECT *,
grp= Sum(CASE WHEN Filename LIKE '-%' THEN 1 ELSE 0 END)
OVER(ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM Yourtable) a
另一种方法较少依赖于命名约定
SELECT id,
Filename,
Directory = Max(iDirectory)OVER(partition BY grp)
FROM (SELECT Id,
Filename,
grp,
iDirectory=CASE WHEN Row_number() OVER(partition BY grp ORDER BY id) = 1 THEN Filename ELSE NULL END
FROM (SELECT *,
grp= Sum(CASE WHEN Filename LIKE '-%' THEN 1 ELSE 0 END)
OVER(ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM #test) a)b
非常感谢Pரதீப்! – user2811907
declare @tt table (id int identity(1,1), [FileName] varchar(50), DirectoryName varchar(50))
insert into @tt([FileName]) values
('- Directory 1')
,('File a')
,('File b')
,('File c')
,('- Directory 2')
,('File d')
,('File e')
,('File f')
,('File g')
SELECT A.ID, A.[FILENAME],
(
SELECT TOP 1 [FILENAME] FROM @TT AS B
WHERE [FILENAME] LIKE '- DIRECTORY%'
AND B.ID <= A.ID
ORDER BY B.ID DESC
) AS DIRECTORYNAME
FROM @TT AS A
始终张贴的样本数据,文本,而不是图像 –
我同意@Pரதீப் - 这里有一些额外的推理,为什么这是一件好事。 ►[https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-when-asking-a-question] – STLDeveloper