ฉันได้จัดตารางบางส่วนในฐานข้อมูลของฉันให้มีความยืดหยุ่นมากขึ้น แต่ฉันไม่แน่ใจว่าจะเขียน 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 ที่นี่พร้อมกับสคีมาอยู่แล้ว
ฉันจะได้รับผลลัพธ์ที่ต้องการได้อย่างไร