13,190
社区成员
发帖
与我相关
我的任务
分享
//建立测试表
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]);
}
}
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