Итак, сначала просто подготовьте ваши данные.Обратите внимание, что я добавляю идентификатор строки идентификатора на потом.
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)
Затем мы создаем область хранения, которая использует этот идентификатор строки, чтобы вычислить, какой строке кода должно следовать каждое из имен.
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» в производную выборку, которая возвращает только те столбцы, которые нам нужны, но позволяет нам сортировать по столбцам кода и столбца 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
Пожалуйста, дайте мне знать, если вам нужны дальнейшие объяснения по этому поводу.