当前位置:编程学习 > C#/ASP.NET >>

一个DataTable排序问题

做一个值日安排软件时遇到一个问题,现有一个数据表
1 a
2 a
3 b
4 b
5 c

想要排序成(使abc之间的间隔行最大)
1 a
3 b
5 c
2 a
4 b

特来向各位大神求思路

值日算法 c --------------------编程问答--------------------
with tb(id,[name])
as(
select 1,'a' union all
select 2,'a' union all
select 3,'b' union all
select 4,'b' union all
select 5,'c'
),
cte as(
select row=row_number()over(partition by [name] order by id),* from tb
)
select id,[name] from cte order by row,id
--------------------编程问答-------------------- 忘了说了 这个不是SQL 是C#中的DataTable 
        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("Name");

       DataRow dr= dt.NewRow();
       dr["ID"] = 1;
       dr["Name"] = "a";
       dt.Rows.Add(dr);..... --------------------编程问答-------------------- 楼上这位是SQL大师呀,不过我个人觉得SQL写的代码可读性较差,而且效率上容易出现问题,一般我都是只进行数据读取操作,业务逻辑都是通过程序来完成 --------------------编程问答-------------------- 解决了 做个记号 哈哈哈
        //建立测试表
        DataTable dt = new DataTable();
        dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Name", typeof(string));

        dt.Rows.Add(new object[] { 1, "a" });
        dt.Rows.Add(new object[] { 2, "c" });
        dt.Rows.Add(new object[] { 3, "b" });
        dt.Rows.Add(new object[] { 4, "b" });
        dt.Rows.Add(new object[] { 5, "c" });
        dt.Rows.Add(new object[] { 6, "c" });

        //排序Name
        DataTable dtCopy = dt.Copy();
        DataView dv = dt.DefaultView;
        dv.Sort = "Name";
        dtCopy = dv.ToTable();
        //核心逻辑
        DataTable newdt=dt.Clone();
        foreach (DataRow dr in dt.Rows)
        {
            DataRow[] rows = dtCopy.Select("Name<>'" + dr["Name"] + "'", "ID");
            if (rows != null) {
                newdt.Rows.Add(rows[0]);
            }
        }
--------------------编程问答-------------------- 个人认为应该先得一个结果集:按姓名分组,组内按id排序。
然后把这个结果集按组内编号、组编号排序,这时候得到的结果集才是楼主要的。
代码地没有,不好意思啊! --------------------编程问答-------------------- dtCopy.Select("Name<>'" + dr["Name"] + "'", "ID")?还有这种用法?受教了。 --------------------编程问答-------------------- System.Linq排序
foreach(DataRow dr in DT.Row.Orderby(a=>a["Name"]))
{}
补充:.NET技术 ,  分析与设计
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,