MSSQL-在select语句中动态选择百分比

时间:2019-02-20 10:38:10

标签: sql-server dynamic

我有一个处理一组行的过程,并根据该列是位于行的前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

然后我对中间和底部选择进行相应的复制。但是,有人告诉我,这些括号可能会在将来更改,因此最好在查询表中包含百分比,并且仅在更改输出列详细信息或括号时才需要触摸该表。 / p>

我试图声明一个变量,以模拟如下所示的括号金额

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 :(得分:0)

我认为您必须使用EXEC使用qynamic SQL查询

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)

答案 1 :(得分:0)

您必须在变量中使用方括号。 声明@top int 设置@top = 50-这将是查询以查找相关的括号图

选择最高(@top)百分比*     来自Sourcetable

更新源表 设置targetcolumn = a.outputdata     来自( 选择顶部(@top)唯一标识百分比,输出数据     从资料表     在a.grouptype = b.grouptype和datacontent =上加入Lookupstable b “顶级” 其中targetcolumn为null 按降序排列 ) 一种 在a.uniqueid = b.uniqueid上加入sourcetable b