现在出现这种情况
SQL2005 新增函数有很多

ITEMID  QTY
091601   5
091601   10
091601   5
091602   10
091603   3
091603   5达到效果:
ITEMID  QTY   LineID
091601   5    1-1
091601   10   1-2
091601   5    1-3
091602   10   2-1
091603   3    3-1
091603   5    3-2有没有直接得到汇总的序列的函数哦 。学习中

解决方案 »

  1.   

    DECLARE @T TABLE(ITEMID VARCHAR(10),QTY INT) 
    INSERT @T SELECT '091601'  ,5 
    INSERT @T SELECT '091601'  ,10 
    INSERT @T SELECT '091601'  ,5 
    INSERT @T SELECT '091602'  ,10 
    INSERT @T SELECT '091603' , 3 
    INSERT @T SELECT '091603',  5 
    SELECT ITEMID,QTY,
    LTRIM(DENSE_RANK( ) OVER(ORDER BY ITEMID))+'-'+
    LTRIM(ROW_NUMBER() OVER(PARTITION BY ITEMID ORDER BY GETDATE())) FROM @T
    /*ITEMID     QTY         
    ---------- ----------- -------------------------------------------------
    091601     5           1-1
    091601     10          1-2
    091601     5           1-3
    091602     10          2-1
    091603     3           3-1
    091603     5           3-2(6 個資料列受到影響)*/
      

  2.   

    谢谢,但是我想问下。Order BY GETDATE是什么意思哦。
      

  3.   

    select *,LineID=ltrim(dense_rank() over(order by ITEMID))+'-'+ltrim(row_number() over(partition by ITEMID order by QTY))
    from @T1 ITEMID     QTY         LineID
    ---------- ----------- ----------
    091601     5           1-1
    091601     5           1-2
    091601     10          1-3
    091602     10          2-1
    091603     3           3-1
    091603     5           3-2(6 行受影响)
      

  4.   

    在1楼的MM上加个 as LineID 就满足要求了
    DECLARE @T TABLE(ITEMID VARCHAR(10),QTY INT) 
    INSERT @T SELECT '091601'  ,5 
    INSERT @T SELECT '091601'  ,10 
    INSERT @T SELECT '091601'  ,5 
    INSERT @T SELECT '091602'  ,10 
    INSERT @T SELECT '091603' , 3 
    INSERT @T SELECT '091603',  5 
    SELECT ITEMID,QTY,
    LTRIM(DENSE_RANK( ) OVER(ORDER BY ITEMID))+'-'+
    LTRIM(ROW_NUMBER() OVER(PARTITION BY ITEMID ORDER BY GETDATE())) as LineID FROM @T
    /*ITEMID     QTY       LineID  
    ---------- ----------- -------------------------------------------------
    091601     5           1-1
    091601     10          1-2
    091601     5           1-3
    091602     10          2-1
    091603     3           3-1
    091603     5           3-2(6 個資料列受到影響)*/
      

  5.   

    DECLARE @T1 TABLE(ITEMID nvarchar(10),QTY int)
    insert @T1
    SELECT '091601',5 UNION ALL
    SELECT '091601',10 UNION ALL 
    SELECT '091601',5 UNION ALL
    SELECT '091602',10 UNION ALL
    SELECT '091603',3 UNION ALL  
    SELECT '091603',5select *,LineID=ltrim(dense_rank() over(order by ITEMID))+'-'
    +ltrim(row_number() over(partition by ITEMID order by QTY))
    from @T1 ITEMID     QTY         LineID
    ---------- ----------- ----------
    091601     5           1-1
    091601     5           1-2
    091601     10          1-3
    091602     10          2-1
    091603     3           3-1
    091603     5           3-2(6 行受影响)
      

  6.   


    create table T(itemid varchar(10),qty int)insert into T select '091601',  5 
    insert into T select '091601',  10 
    insert into T select '091601',  5 
    insert into T select '091602',  10 
    insert into T select '091603',  3 
    insert into T select '091603' , 5GO
    select itemid,qty,
     Rtrim(DENSE_RANK() over(order by itemid) )
     +'-'+Rtrim(row_number() over(partition by itemid order by getdate()) )
    from T
    /*
    091601     5           1-1
    091601     10          1-2
    091601     5           1-3
    091602     10          2-1
    091603     3           3-1
    091603     5           3-2
    */drop table t
      

  7.   


    DECLARE @TA TABLE(ITEMID VARCHAR(10),QTY INT)
    INSERT INTO @TA
    SELECT '091601',5 UNION ALL
    SELECT '091601',10 UNION ALL
    SELECT '091601',5 UNION ALL
    SELECT '091602',10 UNION ALL
    SELECT '091603',3 UNION ALL
    SELECT '091603',5 SELECT *,ROW_NUMBER() OVER (PARTITION BY ITEMID ORDER BY ITEMID),dense_rank() OVER(ORDER BY itemid)
     FROM @TA
      

  8.   


    DECLARE @TA TABLE(ITEMID VARCHAR(10),QTY INT)
    INSERT INTO @TA
    SELECT '091601',5 UNION ALL
    SELECT '091601',10 UNION ALL
    SELECT '091601',5 UNION ALL
    SELECT '091602',10 UNION ALL
    SELECT '091603',3 UNION ALL
    SELECT '091603',5 SELECT *,cast(dense_rank() OVER(ORDER BY itemid) as varchar)+'-'+ 
    cast(ROW_NUMBER() OVER (PARTITION BY ITEMID ORDER BY ITEMID) as varchar)LineID
     FROM @TA
      

  9.   


    IF OBJECT_ID('LI') IS NOT NULL 
       DROP TABLE LI 
    go CREATE TABLE LI(ITEMID VARCHAR(10),QTY INT)
    INSERT INTO LI(ITEMID,QTY)
    SELECT '091601',  5 UNION ALL 
    SELECT '091601',  10 UNION ALL 
    SELECT '091601',  5  UNION ALL
    SELECT '091602',  10 UNION ALL 
    SELECT '091603',  3 UNION ALL 
    SELECT '091603',  5  
    GO--SQL 语句
    SELECT  LTRIM(DENSE_RANK() OVER(ORDER BY ITEMID)) + '-' + LTRIM(ROW_NUMBER() OVER(PARTITION BY ITEMID ORDER BY ITEMID)) AS RID,*  
    FROM LI /*
    RID                                               ITEMID     QTY
    ------------------------------------------------- ---------- -----------
    1-1                                               091601     5
    1-2                                               091601     10
    1-3                                               091601     5
    2-1                                               091602     10
    3-1                                               091603     3
    3-2                                               091603     5*/
     
      

  10.   

    create table T(itemid varchar(10),qty int)insert into T select '091601',  5 
    insert into T select '091601',  10 
    insert into T select '091601',  5 
    insert into T select '091602',  10 
    insert into T select '091603',  3 
    insert into T select '091603' , 5GO
    select itemid,qty,
     left(reverse(itemid),1)
     +'-'+Rtrim(row_number() over(partition by itemid order by getdate()) )
    from Tdrop table t