He reorganizado algunas tablas en mi base de datos para que sean más flexibles, pero no estoy realmente seguro de cómo escribir el SQL para extraer datos significativos de ellas.
Tengo las siguientes tablas (algo abreviado para un ejemplo más claro):
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)
);
Con los siguientes datos:
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');
El objetivo es obtener una consulta plana para un préstamo con todos sus campos. (En el mundo real probablemente habrá entre 20-30 campos para el mismo esquema, pero solo tenemos 2 en el ejemplo):
LoanNumber First Name Last Name
---------- ----------- ----------
ABC123 John Doe
No puedo usar un pivote que haga referencia al 'Nombre' y 'Apellido' porque no tendré idea de lo que realmente estará allí.
Tengo un SQL Fiddle aquí con un esquema ya en su lugar.
¿Cómo puedo obtener el resultado deseado?
fuente