Я реорганизовал некоторые таблицы в своей базе данных, чтобы сделать их более гибкими, но я не совсем уверен, как написать SQL для извлечения из них значимых данных.
У меня есть следующие таблицы (несколько сокращенно для более ясного примера):
CREATE TABLE Loans(
Id int,
SchemaId int,
LoanNumber nvarchar(100)
);
CREATE TABLE SchemaFields(
Id int,
SchemaId int,
FieldName nvarchar(255)
);
CREATE TABLE LoanFields(
Id int,
LoanId int,
SchemaFieldId int,
FieldValue nvarchar(4000)
);
Со следующими данными:
INSERT INTO Loans (Id, SchemaId, LoanNumber) VALUES (1, 1, 'ABC123');
INSERT INTO SchemaFields (Id, SchemaId, FieldName) VALUES (1, 1, 'First Name');
INSERT INTO SchemaFields (Id, SchemaId, FieldName) VALUES (2, 1, 'Last Name');
INSERT INTO LoanFields (Id, LoanId, SchemaFieldId, FieldValue) VALUES (1, 1, 1, 'John');
INSERT INTO LoanFields (Id, LoanId, SchemaFieldId, FieldValue) VALUES (2, 1, 2, 'Doe');
Цель состоит в том, чтобы получить запрос, который является плоским для кредита со всеми его полями. (В реальном мире, вероятно, будет 20-30 полей для одной и той же схемы, но в нашем примере только 2):
LoanNumber First Name Last Name
---------- ----------- ----------
ABC123 John Doe
Я не могу использовать сводку, которая ссылается на «Имя» и «Фамилия», потому что я понятия не имею, что на самом деле там будет.
У меня есть SQL Fiddle здесь со схемой уже на месте.
Как я могу получить желаемый результат?
источник