Я уверен, что есть более эффективный способ сделать это, но как только вы поместите свои данные в SQL во временную таблицу (я просто взломал метод, чтобы сделать это, что вы могли бы сделать из своей книги Excel, генерируя операторы вставки если у вас нет другого более легкого пути) ...
DECLARE @tblData TABLE
(
iRowNo int identity(1,1),
sField nvarchar(100),
sValue nvarchar(1000)
)
INSERT INTO @tblData VALUES ('Number', '123456')
INSERT INTO @tblData VALUES ('name', 'John')
INSERT INTO @tblData VALUES ('province', 'Quebec')
INSERT INTO @tblData VALUES ('client', 'Client 1')
INSERT INTO @tblData VALUES ('type', 'Type 1')
INSERT INTO @tblData VALUES ('Number', '458965')
INSERT INTO @tblData VALUES ('name', 'sammy')
INSERT INTO @tblData VALUES ('province', 'ontario')
INSERT INTO @tblData VALUES ('client', 'Client 2')
INSERT INTO @tblData VALUES ('type', 'Type 2')
... вы можете попробовать следующий запрос ...
SELECT iRowNo, sValue AS Number,
Name = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'name' AND B.iRowNo > A.iRowNo ORDER BY iRowNo),
Province = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'province' AND B.iRowNo > A.iRowNo ORDER BY iRowNo),
Client = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'client' AND B.iRowNo > A.iRowNo ORDER BY iRowNo),
Type = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'type' AND B.iRowNo > A.iRowNo ORDER BY iRowNo)
FROM @tblData AS A
WHERE sField = 'Number'
... что дало мне следующий результат ...
... не уверен, поможет ли это, но исходя из того, что вы спрашивали, я думаю, что это результат, который вы ищете.
Должен признать, что 8 лет назад я много занимался вопросами SQL, поэтому, возможно, есть лучший способ получить ваш ответ в этот новый день и эпоху, или, может быть, всегда. : -)
В любом случае, стоит попробовать ...!