现在有一张表,结构如下:item       passfail
2011001        1
2011002        1
2011003        0
2011004        1
2011005        1
2011006        1要求统计pass连续出现的次数,并加上开始及结束期数,如下startitem enditem count
2011001   2011002   2
2011004             3如果最后一次仍为1,那么统计出来的记录里面enditem先空着,等到下次更新原始表时再判断,
如果2011007出现的是0,那么记录补全为2011004 2011006 3,如果2011007出现的是1,那么记录
更新为2011004      4。要求每次更新原始表时都要执行这个汇总连续次数的方法
哪位高手可以给个例子啊?谢了

解决方案 »

  1.   

    看的头晕,但看第一部分使用sql 的 group by 搞定
      

  2.   


        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            List<Row> list = new List<Row>();
                list.Add(new Row { Item = "201101", PassFail = true});
                list.Add(new Row { Item = "201102", PassFail = true  });
                list.Add(new Row { Item = "201103", PassFail = false });
                list.Add(new Row { Item = "201104", PassFail = true });
                list.Add(new Row { Item = "201105", PassFail = true });
                list.Add(new Row { Item = "201106", PassFail = true });            ResultList rList = new ResultList();
                foreach (Row row in list)
                {
                    rList.Process(row);
                }            foreach (Result result in rList)
                {
                    System.Diagnostics.Debug.WriteLine(result);
                }
            }
        }    public class ResultList : List<Result>
        {
            Row _lastRow = null;
            public void Process(Row row)
            {
                if (row.PassFail)
                {
                    if (_lastRow == null || !_lastRow.PassFail)
                    {
                        this.Add(new Result() { Start = row.Item, End = string.Empty, Count = 1 });
                    }
                    else
                    {
                        this[this.Count - 1].Count++;
                    }
                }
                else
                {
                    if (_lastRow != null && this.Count > 0)
                    {
                        this[this.Count - 1].End = _lastRow.Item;
                    }
                }
                _lastRow = row;
            }        
        }    public class Result
        {
            public string Start { get; set; }
            public string End { get; set; }
            public int Count { get; set; }        public override string ToString()
            {
                return string.Format("Start:{0}, End:{1}, Count:{2}", Start, End, Count);
            }
        }    public class Row
        {
            public string Item { get; set; }
            public bool PassFail { get; set; }
        }