Saya telah mengatur ulang beberapa tabel dalam database saya menjadi lebih fleksibel tetapi saya tidak begitu yakin bagaimana menulis SQL untuk mengekstrak data yang bermakna dari mereka.
Saya memiliki tabel berikut (agak disingkat untuk contoh yang lebih jelas):
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)
);
Dengan data berikut:
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');
Tujuannya adalah untuk mendapatkan permintaan yang flat untuk pinjaman dengan semua bidangnya. (Di dunia nyata kemungkinan akan ada antara 20-30 bidang untuk skema yang sama, tetapi kita hanya memiliki 2 pada contoh):
LoanNumber First Name Last Name
---------- ----------- ----------
ABC123 John Doe
Saya tidak dapat menggunakan pivot yang merujuk pada 'Nama Depan' dan 'Nama Belakang' karena saya tidak tahu apa yang sebenarnya ada di sana.
Saya punya SQL Fiddle di sini dengan skema yang sudah ada.
Bagaimana saya bisa mendapatkan hasil yang diinginkan?
sumber