Sql中获取一项记录在某一组数据中的位置(C#+SqlServer)

有个表类似如下:
  ID     GroupID
   1       1
   2       1
   3       2
   4       2
   5       2
   6       2
   7       3
   8       4
   9       4
   10      4
现在要获取ID为5的记录在组别ID(GroupID)为2数据组中的位置,如果位置从0开始,那么记录5在组别为2的数据记录中的位置为2。不知道如果只用Sql查询语言能不能直接查出来。
我的解决办法有两种,一种是在表中直接用字段实现。可以再给该表加一字段,用以记录该项数据在其组别中的位置。Test(测试)表如下:
  ID     GroupID   GroupPosition
   1       1             0
   2       1             1
   3       2             0
   4       2             1
   5       2             2
   6       2             3
   7       3             0
   8       4             0
   9       4             1
   10      4             2
这样一来,再使用的时候,直接用Sql查询GroupPosition一个字段就OK了。
比如要查找5所在其组别的位置,可用 select GroupPosition from Test where ID=5 and GroupID=2

如果没有GroupPosition字段的话,那么只能在程序中实现查找其位置了。
我用的方法是,先查出所有的2组别数据放在一个DataSet中,查询时按ID排序。即:
select * from Test where GroupID=2 group by ID
这样就可以把组别为2的数据全部查出,然后在程序里对DataSet.Tables[0].Rows.Count做一个for循环,判断DataSet.Tables[0].Row[i]["ID"]==5里,取出循环种子的值。如下:
for(int i=0;i<DataSet.Tables[0].Rows.Count;i++)
{
   if(int.Parse(DataSet.Tables[0].Rows[i]["ID"].ToString())==5)
   {
       //取出i的值,即为5所在组2中的位置   
    }   
}
后者方法可能是笨了点,但如果表已经确定了,而且不能修改,那么也只能用这样的笨方法。
不知道,还有没有更好的方法。如果能用Sql直接查出更好,而且是在不增加位置记录字段的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值