Reorganizei algumas tabelas no meu banco de dados para ser mais flexível, mas não tenho muita certeza de como escrever o SQL para extrair dados significativos delas.
Eu tenho as seguintes tabelas (um pouco abreviadas para um exemplo mais 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)
);
Com os seguintes dados:
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');
O objetivo é obter uma consulta simples para um empréstimo com todos os seus campos. (No mundo real, provavelmente haverá entre 20 e 30 campos para o mesmo esquema, mas temos apenas 2 no exemplo):
LoanNumber First Name Last Name
---------- ----------- ----------
ABC123 John Doe
Não posso usar um pivô que faça referência ao 'Primeiro nome' e 'Sobrenome' porque não tenho idéia do que realmente estará lá.
Eu tenho um SQL Fiddle aqui com o esquema já em vigor.
Como posso obter o resultado desejado?
fonte