TSQL - 用于生成增量序列号的查询帮助

时间:2017-01-20 15:57:29

标签: sql sql-server tsql

需要有关查询的帮助才能在下表中生成两个增量值。

AnimatedVectorDrawable drawable = (AnimatedVectorDrawable) context().getDrawable(R.drawable.long_press_anim); imageView.setImageDrawable(drawable); drawable.registerAnimationCallback(new Animatable2.AnimationCallback() { @Override public void onAnimationEnd(Drawable drawable) { super.onAnimationEnd(drawable); ((AnimatedVectorDrawable) drawable).start(); } }); drawable.start(); BatchNo都应该从1开始。

BatchSequenceNo应增加1,最多500行。

在501行,BatchSequenceNo应增加1(即BatchNo = 2)和 BatchNo应重置为1。

BatchSequenceNo值需要增加1,每500行增加一次。

BatchNo

5 个答案:

答案 0 :(得分:1)

最简单的方法是使用计算列<{1}}上的BatchNo / BatchSequenceNo个数字

BatchId

答案 1 :(得分:0)

你可以使用modulo和division来做到这一点。

    Select 
CAST(((row_number() over(order by t1.number) / 500)+1) as int) as BatchNo,
CAST(((row_number() over(order by t1.number)-1 % 500)+1) as int) as BatchSequenceNo 
    from   master..spt_values t1
           cross join master..spt_values t2

答案 2 :(得分:0)

使用除法运算符和模运算符分别得到batchno和batchsequenceno。

Select top 2010 
 1+(row_number() over(order by t1.number)-1)/500 as batch_no
,'A -SampleText-'+cast(1+(row_number() over(order by t1.number)-1)%500 as varchar(100)) as N
from master..spt_values t1
cross join master..spt_values t2

Sample Demo

答案 3 :(得分:0)

rextester:http://rextester.com/GUSA26703

public class Tower : MonoBehaviour {

public GameObject towerPrefab;
public float speed = 1f;

private bool canPlaceTower()
{
    return tower == null;
}


private GameObject tower;

// Use this for initialization
void Start()
{

}

void Update()
{
    var lookPos = Enemy.position - transform.position;
    lookPos.y = 0;
    var rotation = Quaternion.LookRotation(lookPos);
    transform.rotation = Quaternion.Lerp(transform.rotation, rotation, speed * Time.time);
    transform.Rotate(0, -90, 0);
}
}

结果:

create table #tblbatch (
    batchid  int   not null identity(1,1) primary key
  , sname varchar(50) not null
  , BatchSequenceNo int
  , BatchNo int
);

insert into #tblBatch(Sname,BatchSequenceNo,BatchNo)
Select top 2010 
    Sname = 'A -SampleText-'+cast(row_number() over(order by t1.number) as varchar)
  , BatchSequenceNo = ((row_number() over(order by t1.number) -1)%500)+1
  , BatchNo = ((row_number() over(order by t1.number) -1)/500)+1
from   master..spt_values t1
  cross join master..spt_values t2

select 
    minN=min(batchid)
  , maxN=max(batchid)
  , minBatchSequenceNo=min(BatchSequenceNo)
  , maxBatchSequenceNo=max(BatchSequenceNo)
  , BatchCount=count(*)
  , BatchNo
  from #tblbatch
  group by BatchNo
  order by BatchNo

rextester设置:http://rextester.com/UWIAU84781

+------+-------+--------------------+--------------------+------------+---------+
| minN | maxN  | minBatchSequenceNo | maxBatchSequenceNo | BatchCount | BatchNo |
+------+-------+--------------------+--------------------+------------+---------+
|    1 |   500 |                  1 |                500 |        500 |       1 |
|  501 |  1000 |                  1 |                500 |        500 |       2 |
| 1001 |  1500 |                  1 |                500 |        500 |       3 |
| 1501 |  2000 |                  1 |                500 |        500 |       4 |
| 2001 |  2010 |                  1 |                 10 |         10 |       5 |
+------+-------+--------------------+--------------------+------------+---------+

结果:

with n as (select n from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n))
, d as (
        /* start from 0 */
  --select n=row_number() over (order by (select 1))-1 
        /* start from 1 */
  select n=row_number() over (order by (select 1))
    from         n as deka
      cross join n as hecto
      cross join n as kilo    
      cross join n as [tenk]  
      --cross join n as [hundredk]
      --cross join n as mega
) 
, batch as (
  select 
      n
    /* start from 0 */
    --, BatchSequenceNo=(n%500)+1
    --, BatchNo=(n/500)+1
    /* start from 1 */
    , BatchSequenceNo=((n-1)%500)+1
    , BatchNo=((n-1)/500)+1
    from d
)
select 
    minN=min(n)
  , maxN=max(n)
  , minBatchSequenceNo=min(BatchSequenceNo)
  , maxBatchSequenceNo=max(BatchSequenceNo)
  , BatchCount=count(*)
  , BatchNo
  from batch
  group by BatchNo
  order by BatchNo

答案 4 :(得分:-1)

我希望你喜欢这个:

WITH cte_Tally AS (
    SELECT  
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) n
    FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n) --10
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n) -- 100
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n) -- 1,000
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) d(n) -- 10,000
)
SELECT ROW_NUMBER() OVER (PARTITION BY n % 500 ORDER BY n) AS [Sequence], n % 500 AS [Sequence], n 
FROM cte_Tally
ORDER BY n