Я реорганізував деякі таблиці в моїй базі даних, щоб бути більш гнучкими, але я не дуже впевнений, як написати 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 із схемою вже на місці.
Як я можу отримати бажаний результат?