Zreorganizowałem niektóre tabele w mojej bazie danych, aby były bardziej elastyczne, ale nie jestem pewien, jak napisać SQL, aby wyodrębnić z nich znaczące dane.
Mam następujące tabele (nieco skrócone dla bardziej przejrzystego przykładu):
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)
);
Z następującymi danymi:
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');
Celem jest uzyskanie zapytania, które jest płaskie dla pożyczki ze wszystkimi jej polami. (W prawdziwym świecie prawdopodobnie będzie 20-30 pól dla tego samego schematu, ale mamy tylko 2 w tym przykładzie):
LoanNumber First Name Last Name
---------- ----------- ----------
ABC123 John Doe
Nie mogę użyć osi przestawnej, która odwołuje się do „imienia” i „nazwiska”, ponieważ nie mam pojęcia, co tam będzie.
Mam tutaj SQL Fiddle ze schematem już na miejscu.
Jak mogę uzyskać pożądany wynik?
źródło