表格1
Code, desc, type id 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类型查看表
预期产量
Code type-1 type-2 type-3 type-4 01 Rajan Vijayan suresh caresh 01 Sajan null null Sujan 01 null null null vikran 02 desk card supan null 02 null villa null null 02 null megash null null
如何查询上述条件
需要查询帮助
因此,首先只是暂存您的数据。请注意,我将添加一个标识行ID,以供以后使用。
IF OBJECT_ID('tempdb..#test') IS NOT NULL drop table #test IF 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 code=t1.Code AND [type id]=t1.[type id] AND RowNumber<=t1.RowNumber), code, [type id], [DESC] FROM #test t1
最后,我们在数据上创建一个PIVOT表(以“伪造”该运算符的标准SQL 2000方法完成)。然后,我们将“ PIVOT表”放置在派生选择中,该选择仅返回所需的列,但允许我们对code和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
如果您想进一步解释这些问题,请告诉我。