Member 13863605 Ответов: 2

Отображение только выбранных пользователем столбцов


У меня есть два стола, список гостей и список клиентов. Я присоединился к ним и использовал динамическую сводную таблицу SQL для преобразования столбца "город" из таблицы GuestList в строки или заголовки таблиц, и среднее население будет отображаться под каждым городом, а " Id " имеет три значения: 1, 2,3, и каждый город имеет все эти три идентификатора. Таким образом, после выполнения запроса внизу заголовок моей таблицы выглядит следующим образом, и среднее население отображается под каждым городом.

Время| Атланта_1| Атланта_2| Атланта_3| Н_1| Н_2| Н_3| ЛА_1| ЛА_2| ЛА_3

Я хочу отображать только те столбцы, которые выбирает пользователь. Поэтому, если пользователь выберет Atlanta_1, NY_2, LA_1, то только эти три столбца будут отображаться вместе со временем, и ничего больше. Я могу создать параметр nvarchar в своей хранимой процедуре для строки столбцов, которые пользователь собирается выбрать, но какие изменения мне нужно будет внести в свой запрос только для отображения выбранных столбцов вместо всех? Не мог бы кто-нибудь помочь мне с этим, пожалуйста.

Что я уже пробовал:

declare @ColumnNames nvarchar(max) = ''
declare @SQL nvarchar(max) = ''

select @ColumnNames += QUOTENAME(a.address+'_'+Convert(Varchar(10),a.Id )) + ','           
from GuestList as a
innerjoin CustomerList as b
on a.Id = b.Id
groupby a.address
orderby a.address 

set@ColumnNames =left(@ColumnNames, LEN(@ColumnNames)-1)set@SQL= N'select Time,'+@ColumnNames +'
from 
(
select a.Time, a.address+'_'+Convert(Varchar(10),a.Id ) as City, a.population, b.Gender    
from GuestList as a
inner join CustomerList as b
on a.Id = b.Id
inner join Split(@city, '','') as c
on a.city = c.Data
where a.city = c.Data
) as SourceTable
pivot
(avg(population) 
for city 
in ('+@ColumnNames +')) as PivotTable

MadMyche

Что вы используете, чтобы представить это? Или конечный пользователь использует программу типа SSMS

Member 13863605

Я использую ASP.NET

2 Ответов

Рейтинг:
2

Gerry Schmitz

"Предварительный просмотр" ваших данных перед поворотом; что-то вроде этого:

... Где CHARINDEX( city, @ColumnNames ) > 0


Member 13863605

не работает

Gerry Schmitz

Поскольку вы не показали свой "новый" SQL (это не работает), я предполагаю, что вы просто болтаете.

Или я должен попросить вас "пожалуйста, покажите нам ваш новый SQL" прямо сейчас.

Пожалуйста. Ха, а ты будешь?

Рейтинг:
1

CHill60

@ColumnNames это для вашего стержня.

Имейте отдельную переменную для списка, который ввел пользователь, например @UserColumns и измените свой динамический sql следующим образом

set@SQL= N'select Time,'+@UserColumns +'
from