因此,首先只是暂存您的数据。请注意,我将添加一个标识行ID,以供以后使用。
IF OBJECT_ID('tempdb..#test') IS NOT NULL drop table #testIF OBJECT_ID('tempdb..#Numbered') IS NOT NULL drop table #Numbered CREATE TABLE #test (Code CHAr(2), [DESC] varchar(10), [type id] INT, RowNumber INT IDENTITY(1,1))INSERT #test VALUES ('01', 'Rajan', 1),('01' ,'Sajan', 1),('01' ,'Vijayan', 2),('01' ,'Suresh', 3),('01' ,'Caresh', 4),('01' ,'Sujesh', 4),('01' ,'vikran', 4),('02' ,'desk', 1),('02' ,'card' ,2),('02' ,'villa', 2),('02', 'megash', 2),('02', 'supan', 3)
然后,我们创建一个存放区,使用该行ID来计算每个名称应继续在代码的哪一行。
CREATE TABLE #Numbered ( RowNum int, Code CHAr(2), [type] VARCHAr(10), [DESC] VARCHAr(10) ) INSERT #Numbered SELECT (select count(*) from #test where pre=t1.Code AND [type id]=t1.[type id] AND RowNumber<=t1.RowNumber), pre, [type id], [DESC] FROM #test t1
最后,我们在数据上创建一个PIVOT表(以“伪造”该运算符的标准SQL 2000方法完成)。然后,我们将“
PIVOT表”放置在派生选择中,该选择仅返回所需的列,但允许我们对pre和rownum列进行排序以生成所需的输出。
SELECt Code,[type-1],[type-2],[type-3],[type-4] FROM (Select P.Code,RowNum , Min( Case When type = '1' Then [DESC] End ) As [type-1] , Min( Case When type = '2' Then [DESC] End ) As [type-2] , Min( Case When type = '3' Then [DESC] End ) As [type-3] , Min( Case When type = '4' Then [DESC] End ) As [type-4]From #Numbered As P Group By P.Code,RowNum) R ORDER BY Code,RowNum
如果您想进一步解释这些问题,请告诉我。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)