我有一个处理一组行的过程,并根据该列是位于行的前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
这不起作用。有谁知道从另一张表中动态选择我的行百分比的另一种方法?
答案 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