Tsql sqlserver中基于条件的随机数生成

Tsql sqlserver中基于条件的随机数生成,tsql,sql-server-2014,Tsql,Sql Server 2014,需要根据ID3列生成随机数。在备注中提到了每行逻辑。 注意:这是我需要应用于大数据集的示例数据 是否有可能根据条件创建随机数或递增数 如果条件通过,则保留相同的条件,否则生成另一个条件(rand+1)这将为您提供一个具有所需行为的递增数字,假设ID1是递增数字。如果不是这样,您将需要其他方式对数据进行排序,因为顺序是您想要的行为所固有的 这里我假设我们可以按ID1订购,因为它在逻辑中没有在其他任何地方使用 create table #t ( ID1 INT, ID2 INT,

需要根据ID3列生成随机数。在备注中提到了每行逻辑。 注意:这是我需要应用于大数据集的示例数据

是否有可能根据条件创建随机数或递增数


如果条件通过,则保留相同的条件,否则生成另一个条件(rand+1)

这将为您提供一个具有所需行为的递增数字,假设ID1是递增数字。如果不是这样,您将需要其他方式对数据进行排序,因为顺序是您想要的行为所固有的

这里我假设我们可以按ID1订购,因为它在逻辑中没有在其他任何地方使用

create table #t
(
    ID1 INT,
    ID2 INT,
    ID3 INT
)

insert into #t(ID1, ID2, ID3) values(1,1,1),(2,1,1),(3,2,1),(4,2,31),(5,2,1),(6,2,1),(7,2,23),(8,2,31);

with c1 as 
(
    select ID1, ID2, ID3,
        case when ID3 != 1 or lag(ID3,1,2) over (order by ID1) != 1 then 1 else 0 end as IncrementHere
    from #t
)
select ID1, ID2, ID3, sum(IncrementHere) over (order by ID1 rows unbounded preceding) as IncrementingNumber
from c1     

假设ID1是一个递增的数字,这将为您提供一个具有所需行为的递增数字。如果不是这样,您将需要其他方式对数据进行排序,因为顺序是您想要的行为所固有的

这里我假设我们可以按ID1订购,因为它在逻辑中没有在其他任何地方使用

create table #t
(
    ID1 INT,
    ID2 INT,
    ID3 INT
)

insert into #t(ID1, ID2, ID3) values(1,1,1),(2,1,1),(3,2,1),(4,2,31),(5,2,1),(6,2,1),(7,2,23),(8,2,31);

with c1 as 
(
    select ID1, ID2, ID3,
        case when ID3 != 1 or lag(ID3,1,2) over (order by ID1) != 1 then 1 else 0 end as IncrementHere
    from #t
)
select ID1, ID2, ID3, sum(IncrementHere) over (order by ID1 rows unbounded preceding) as IncrementingNumber
from c1     

ID1真的是“X”还是一个递增值?我们如何订购数据?另外,您使用的是什么版本的SQL Server?例如,SQL 2012+将有一个与2005不同的解决方案。请阅读以了解有关改进您的问题的一些提示。使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题也很有帮助。语法和功能的差异通常会影响答案。@JamesCasey ID1您不必担心。但值不是递增的one@iamdave:2014版isIs ID1真的是“X”还是一个递增值?我们如何订购数据?另外,您使用的是什么版本的SQL Server?例如,SQL 2012+将有一个与2005不同的解决方案。请阅读以了解有关改进您的问题的一些提示。使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题也很有帮助。语法和功能的差异通常会影响答案。@JamesCasey ID1您不必担心。但值不是递增的one@iamdave:2014版从您的评论中可以看出,ID1不是递增的,这需要用其他一些排序进行修改-基本上用“order by ID1”替换为“order by{something other}”。表中的数据没有固有顺序,如果没有其他合适的排序条件,则可能需要向表中添加标识列。由于上面的注释ID1不是递增的,因此需要使用其他排序进行修改-基本上将“order by ID1”替换为“order by{Others}”。表中的数据没有内在顺序,如果没有其他合适的排序条件,则可能需要向表中添加标识列。