使用条件标准来更改Row_Number之类的操作

时间:2013-05-24 14:29:46

标签: sql-server variables data-partitioning

使用SQL Server 2012.我使用变量来识别在我的整个数据集中满足“各种条件”的次数。我想要占用这些实例中的一半,并做一件事“first_half_thing”,而另一半则执行“second_half_thing”。当我只包括满足条件的那些实例时,它可以正常工作。但是我想在我的整个数据集上使用3种或4种不同版本的“各种标准”执行此操作。

我的第一次尝试是在满足“各种标准”时尝试更改@CriteriaMetCount的值,并使用该计数来执行“first_half_thing”或“second_half_thing”但不起作用。有没有办法Partition by,然后使用不同的“各种标准”

declare @TargetNumber BIGINT
declare @TargetHalf BIGINT
declare @CriteriaMetCount BIGINT

set @CriteriaMetCount=1
Set @TargetNumber=(

select count(distinct(AI2.AccountID)) from Table_AccountInfo AI2
where
AI2.OrgID in (
    select distinct(Org2.OrgID) from Table_Organization Org2
        where Org2.OrganizationName like ('%Name%'))
and (various criteria here)
)

Set @TargetHalf= (select iif(
(@TargetNumber%2)>0,((@TargetNumber+1)/2),(@TargetNumber/2)))

select  AI.AccountID, @targethalf, @targetnumber,ROW_Number() over(order by AI.AccountID) AS ROW_COUNT,
case when ((ROW_Number() over(order by AI.AccountID))<=@targethalf) then  'first_half_thing' else 'second_half_thing' end, 
iif(((ROW_Number() over(order by AI.AccountID))%2=0),(@CriteriaMetCount+1),@CriteriaMetCount)


from Table_AccountInfo LI
where AI.AccountID >= @TargetNumber
and AI.OrgID in (
        select distinct(Org.OrgID) from Table_Organization Org
        where Org.OrganizationName like ('%Name%')) 


and (various criteria here) 

1 个答案:

答案 0 :(得分:0)

好的,我这样做了:添加了一个临时表,它执行了第一个操作(评估了“各种条件”的整个数据集)然后做了一个简单的case when检查当前的AccountID与存储在temp中的那个表

我第一次以这种方式使用临时表并且有效,所以你去了。