我有一個表叫採購明細表,現在新增一字段"採購序號",用來將訂單明細進行排序.
請問如何用SQL語句達成以下目的?原來的表:
採購訂單   材料   數量
PO2010060001 AA 1200
PO2010060001 BB 200
PO2010060001 CC 600
PO2010060002 CC 1400
PO2010060002 AA 800現在的表:
採購訂單 採購序號 材料 數量
PO2010060001 0   AA 1200
PO2010060001 0   BB 200
PO2010060001 0   CC 600
PO2010060002 0   CC 1400
PO2010060002 0   AA 800我希望得到的表:採購訂單 採購序號 材料 數量
PO2010060001 1   AA 1200
PO2010060001 2   BB 200
PO2010060001 3   CC 600
PO2010060002 1   CC 1400
PO2010060002 2   AA 800謝謝大家的幫助.

解决方案 »

  1.   

    05用ROW_NUMBER00的用个循环吧更新吧
      

  2.   

    CREATE TABLE T(採購訂單 VARCHAR(20), 材料 VARCHAR(10), 數量 INT)INSERT T
    SELECT 'PO2010060001','AA',1200 UNION ALL
    SELECT 'PO2010060001','BB',200 UNION ALL
    SELECT 'PO2010060001','CC',600 UNION ALL
    SELECT 'PO2010060002','CC',1400 UNION ALL
    SELECT 'PO2010060002','AA',800ALTER TABLE T ADD 採購序號 INTUPDATE T SET 採購序號=RN
    FROM(SELECT *,RN=ROW_NUMBER() OVER(PARTITION BY 採購訂單 ORDER BY GETDATE())FROM T) A 
    JOIN T B ON A.採購訂單=B.採購訂單 AND A.材料=B.材料 AND A.數量=B.數量
    SELECT 採購訂單,採購序號,材料,數量 FROM T採購訂單                 採購序號        材料         數量
    -------------------- ----------- ---------- -----------
    PO2010060001         1           AA         1200
    PO2010060001         2           BB         200
    PO2010060001         3           CC         600
    PO2010060002         1           CC         1400
    PO2010060002         2           AA         800
      

  3.   

    declare @ta table(a varchar(20),b varchar(20),c int)
    insert @taselect 'PO2010060001','AA', 1200 UNION ALL
    select 'PO2010060001','BB', 200 UNION ALL
    select 'PO2010060001','CC', 600 UNION ALL
    select 'PO2010060002','CC', 1400 UNION ALL
    select 'PO2010060002','AA', 800
    select a,0 as n,b,c into #T from @ta
    declare @a varchar(20),@num int
    set @num=1update #t set n=@num,@num=case when a=@a then @num+1 else 1 end,@a=aselect * from #t 
    (所影响的行数为 5 行)a                    n           b                    c           
    -------------------- ----------- -------------------- ----------- 
    PO2010060001         1           AA                   1200
    PO2010060001         2           BB                   200
    PO2010060001         3           CC                   600
    PO2010060002         1           CC                   1400
    PO2010060002         2           AA                   800(所影响的行数为 5 行)
      

  4.   

    謝謝大家的幫忙.因為我用的是SQL SERVER 2000,我選擇4樓的做法.再次感謝各位.