2016-07-20 2 views
0

У меня есть следующие таблицыКак написать запрос с динамическими столбцами?

PeopleInformation 

со следующими столбцами:

PeopleID, 
FirstName, 
LastName, 
DOB, 
Email, 
ContactNo etc 

и другой стол

ColumnInformation 

со следующими столбцами:

ColumnID 
ColumnName 
UserID 

, поэтому столбец пользователя добавлен в таблицу ColumnInformation. так скажем пользователю с идентификатором пользователя = 1, то мне нужно, чтобы отобразить столбцы только назначенные ему

Итак, я хочу, чтобы написать запрос, который генерирует PeopleInformation записи из columnInformaiton по UserID

+1

Не могли бы вы разместить некоторые данные о выборке и ожидаемые результаты? – Petaflop

+0

Я считаю, что это (http://stackoverflow.com/questions/7041553/dynamically-select-the-columns-to-be-used-in-a-select-statement) - это то, что вам нужно. 'UserId' ->' ColumnName' (s) и выберите только эти столбцы из 'PeopleInformation'. Однако вам стоит подумать о реструктуризации. – Ash

+0

это звучит как странный дизайн. Если вы хотите ограничить количество отображаемых столбцов, в зависимости от того, применяются ли они к этому пользователю, более обычный способ сделать это - вернуть все столбцы, но если вы хотите, то на своем экране вы можете скрыть которые возвращают null для этого пользователя. – ADyson

ответ

0

Я предполагаю, что вы поддерживаете детали колонки как строка для каждого пользователя. Пожалуйста, см. Это,

DECLARE @UserId INT = 2 
DECLARE @sql NVARCHAR(max) = '' 
    ,@columnlist NVARCHAR(max) = '' 
DECLARE @ColumnInformation TABLE (
    ColumnID INT identity(1, 1) 
    ,ColumnName VARCHAR(50) 
    ,UserID INT 
    ) 

insert into @ColumnInformation 
values 
('PeopleID',1) 
,('FirstName',1) 
,('LastName',1) 
,('DOB',1) 
,('Email',1) 
,('ContactNo',1) 
,('PeopleID',2) 
,('FirstName',2) 
,('LastName',2) 

SELECT @columnlist = @columnlist + ',' + ColumnName 
FROM @ColumnInformation 
WHERE UserID = @UserId 

SELECT @columnlist = stuff(@columnlist, 1, 1, '') 

SET @sql = 'select ' + @columnlist + ' from PeopleInformation' 

EXEC sp_executesql @sql 
Смежные вопросы