Я не смог найти определение того, как обнаружить наборы значений параметров, то есть какой «TEMP» принадлежит какому «TYPE». Поэтому я предполагаю, что наборы значений параметров всегда вводятся в базу данных последовательно и в порядке, указанном в вопросе. Комментарий ОП, кажется, позволяет это предположение. Не очень сложно (хотя и немного) реализовать некоторую устойчивость к перетасованным ордерам (связывая через обход параметрическими идентификаторами), но я надеюсь, что в этом нет необходимости.
Я также не смог найти информацию о том, что означает "SL NO" и откуда берется значение. Поэтому я притворяюсь, разделив значение rowid значения TESTRESULT на 7 (количество имен различных параметров, которое я считаю размером набора параметров). Не должно быть трудно выкопать правильные значения из вашей базы данных. Не требуется, чтобы значения rowid были кратны 7, если параметры вводятся последовательно. Просто «SL NO» может пропустить несколько чисел, если, например, rowids. «ТИП» - это кратные, например, 8, в противном случае запрос допускает разрывы между наборами параметров.
Вы можете найти часть моего MCVE, не относящуюся к запросу, в конце этого ответа.
Запрос:
select
'SL NO',
TYPE.parametername,
TEMP.parametername,
TIME.parametername,
DATE.parametername,
TECHNICIAN.parametername,
TESTLENGTH.parametername,
TESTRESULT.parametername
from
parameter TYPE,
parameter TEMP,
parameter TIME,
parameter DATE,
parameter TECHNICIAN,
parameter TESTLENGTH,
parameter TESTRESULT
where TYPE.parameterid='TYPE'
and TEMP.rowid=TYPE.rowid+1
and TIME.rowid=TYPE.rowid+2
and DATE.rowid=TYPE.rowid+3
and TECHNICIAN.rowid=TYPE.rowid+4
and TESTLENGTH.rowid=TYPE.rowid+5
and TESTRESULT.rowid=TYPE.rowid+6
UNION ALL
select
TESTRESULT.rowid/7,
TYPE.parametervalue,
TEMP.parametervalue,
TIME.parametervalue,
DATE.parametervalue,
TECHNICIAN.parametervalue,
TESTLENGTH.parametervalue,
TESTRESULT.parametervalue
from
parametervalues TYPE,
parametervalues TEMP,
parametervalues TIME,
parametervalues DATE,
parametervalues TECHNICIAN,
parametervalues TESTLENGTH,
parametervalues TESTRESULT
where TYPE.parameterid='TYPE'
and TEMP.rowid=TYPE.rowid+1
and TIME.rowid=TYPE.rowid+2
and DATE.rowid=TYPE.rowid+3
and TECHNICIAN.rowid=TYPE.rowid+4
and TESTLENGTH.rowid=TYPE.rowid+5
and TESTRESULT.rowid=TYPE.rowid+6
;
- создать одну таблицу на лету для каждого столбца сводных данных
- выберите из каждой из этих таблиц запись для одного столбца
- связать записи для одной и той же строки с помощью предположений (как указано выше) для rowids
Выход:
SL NO Type Temp(Deg.C) Time Date Technician Test Length Test Result
1 DW1 21 10:45 PM 14/09/2011 Test1 12 Pass
2 DW2 22 11.45 15/09/2011 Test2 12 Pass
MCVE (.dump
):
BEGIN TRANSACTION;
CREATE TABLE parametervalues(parameterid varchar(30), parametervalue varchar(30) );
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TYPE','DW1');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TEMP','21');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TIME','10:45 PM');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('DATE','14/09/2011');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TECHNICIAN','Test1');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TESTLENGTH','12');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TESTRESULT','Pass');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TYPE','DW2');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TEMP','22');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TIME','11.45');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('DATE',' 15/09/2011');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TECHNICIAN','Test2');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TESTLENGTH','12');
INSERT INTO parametervalues(parameterid,parametervalue) VALUES('TESTRESULT','Pass');
CREATE TABLE parameter (parameterid varchar(30), parametername varchar(30));
INSERT INTO parameter(parameterid,parametername) VALUES('TYPE','Type');
INSERT INTO parameter(parameterid,parametername) VALUES('TEMP','Temp(Deg.C)');
INSERT INTO parameter(parameterid,parametername) VALUES('TIME','Time');
INSERT INTO parameter(parameterid,parametername) VALUES('TATE','Date');
INSERT INTO parameter(parameterid,parametername) VALUES('TECHNICIAN','Technician');
INSERT INTO parameter(parameterid,parametername) VALUES('TESTLENGTH','Test Length');
INSERT INTO parameter(parameterid,parametername) VALUES('TESTRESULT','Test Result');
COMMIT;
Примечание 1:
Я пропустил разрывы строк для заголовков имен параметров «Test *». Это кажется неуместным.
Примечание 2:
Мой MCVE содержит значения, соответствующие желаемому результату, не всегда совпадающие с образцом ввода. Если значения взяты из входных данных выборки, выходные данные выглядят иначе - и более убедительно. Неважно, какая сторона несоответствия верна, а какая опечатка. Я решил реализовать версию, которая требует большей гибкости.