2017-10-19 66 views
0

嗨,大家好,我需要在这一个你的帮助:创建基于特定行组列

我需要填充基于一些特定的行在SQL Server中的附加列(目录)。为此,我需要评估列(文件名)并将其复制到列(目录),直到关键字发生更改。所以原来的表是这样的:

enter image description here

而这正是我需要完成:

enter image description here

我可以使用CTE?怎么样?

在此先感谢!

+1

始终张贴的样本数据,文本,而不是图像 –

+0

我同意@Pரதீப் - 这里有一些额外的推理,为什么这是一件好事。 ►[https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-when-asking-a-question] – STLDeveloper

回答

0

如果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 
+0

非常感谢Pரதீப்! – user2811907

0
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