MSSQL - Динамический выбор процента в операторе выбора - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть процесс, который берет группу строк и обновляет столбец в зависимости от того, находится ли он в верхних 50% строк, в средних 20% строк или в нижних 30% строк.

Я сделал это с помощью процента выбора, как показано ниже

update sourcetable
set targetcolumn = a.outputdata
    from (
select top 50 percent uniqueid, outputdata
    from sourcetable a
    join Lookupstable b on a.grouptype = b.grouptype and and datacontent = 
'topbracket'
where targetcolumn is null
order by ranking desc
) a
join sourcetable b on a.uniqueid = b.uniqueid

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

Я попытался объявить переменную для имитации ссылки на количество скобок, как показано ниже

declare @top int
set @top = 50 --this would be a query to look for the relevant bracket figure

select top @top percent *
    from Sourcetable

Это не работает.Кто-нибудь знает альтернативный способ динамического выбора моего процента строк из поиска в другой таблице?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы должны использовать скобку в переменной.объявлять @top int set @top = 50 - это будет запрос для поиска соответствующей цифры в скобках

выбор верхнего (@top) процента * из исходной таблицы

обновление исходного набора set targetcolumn =a.outputdata из (выберите верхний (@top) процент уникального, выходные данные из исходной таблицы a lookupstable b для a.grouptype = b.grouptype и и datacontent = 'topbracket', где targetcolumn имеет нулевой порядок по рангу desc) из исходной таблицы соединения b наa.uniqueid = b.uniqueid

0 голосов
/ 20 февраля 2019

Я думаю, что вы должны использовать динамический SQL-запрос, используя EXEC

declare @top  varchar(100)-- int
set @top = '50' --this would be a query to look for the relevant bracket figure
DECLARE @sql nvarchar(4000)

set @sql = 'select top ' + @top + ' PERCENT * from Sourcetable ' 





exec (@sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...