描述:
---------------------------------------
id  编号 名称  数量  量差  排名
1   001  a     100
2   001  b     80
3   001  c     60
4   002  aa    100
5   002  bb    30
6   002  cc    30
7   003  a     100
8   003  bb    50
...........想对其中的数据执行修改操作,得到下面的结果:
---------------------------------------
id  编号 名称  数量  量差  排名
1   001  a     100   40
2   001  b     80    20
3   001  c     60    0
4   002  aa    100   70
5   002  bb    30    0
6   002  cc    30    0
7   003  a     100   50
8   003  bb    50    0
...........
如果能得到各自的排名,是更理想的结果了.
---------------------------------------
id  编号 名称  数量  量差  排名
1   001  a     100   40   1
2   001  b     80    20   2
3   001  c     60    0    3
4   002  aa    100   70   1
5   002  bb    30    0    2
6   002  cc    30    0    2/3 (排第二或第三都可以)
7   003  a     100   50   1
8   003  bb    50    0    2
...........
请高手指点如何通过写,SQL语句才能实现

解决方案 »

  1.   

    --建立测试环境
    Create table A
    (ID Int IDENTITY(1,1),
    编号 Nvarchar(10),
    名称 Nvarchar(10),
    数量 Int,
    量差 Int,
    排名 Int
    )Insert A values('001','a',100,Null,Null)
    Insert A values('001','b',80,Null,Null)
    Insert A values('001','c',60,Null,Null)
    Insert A values('002','aa',100,Null,Null)
    Insert A values('002','bb',30,Null,Null)
    Insert A values('002','cc',30,Null,Null)
    Insert A values('003','a',100,Null,Null)
    Insert A values('003','bb',50,Null,Null)
    --测试
    Update AA set 量差=(AA.数量-(Select min(数量) from A Where 编号=AA.编号 )),
    排名=(Select (IsNull(Count(*),0)+1) from A Where A.ID<AA.ID And 编号=AA.编号)
    from A AA--删除测试环境
    Drop table A