Tôi đã sắp xếp lại một số bảng trong cơ sở dữ liệu của mình để linh hoạt hơn nhưng tôi không thực sự chắc chắn làm thế nào để viết SQL để trích xuất dữ liệu có ý nghĩa từ chúng.
Tôi có các bảng sau (viết tắt một chút cho một ví dụ rõ ràng hơn):
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)
);
Với dữ liệu sau:
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');
Mục tiêu là để có được một truy vấn không thay đổi cho một khoản vay với tất cả các lĩnh vực của nó. (Trong thế giới thực, có thể sẽ có từ 20-30 trường cho cùng một lược đồ, nhưng chúng ta chỉ có 2 trong ví dụ):
LoanNumber First Name Last Name
---------- ----------- ----------
ABC123 John Doe
Tôi không thể sử dụng trục xoay tham chiếu 'Tên' và 'Họ' vì tôi không biết cái gì sẽ thực sự ở đó.
Tôi có một SQL Fiddle ở đây với lược đồ đã có sẵn.
Làm thế nào tôi có thể nhận được kết quả mong muốn?