我有两个数据表,第一个有No Of Specification
列,第二个有NoOfSpec
列,但是我想在单列下合并为No Of Specification
。
数据表#1
No Of Specification
--------------------
1
2
3
数据表2
NoOfSpec
---------------------
4
5
6
结果应该是
No Of Specification
----------------------
1
2
3
4
5
6
注意:两个表中都有多列
答案 0 :(得分:1)
这是您可以使用Linq连接数据的一种方法。提取两个表中数据行的Union
,并为每个对象创建一个匿名对象,在其中为合并设置密钥-在您的情况下,第一个表的No of Specification
和{ {1}}从第二个开始。然后,我们对该联合使用NoOfSpec
来获取合并的唯一值。最后,我们从联合中选择每个唯一键的第一个匹配项,然后复制到新的GroupBy
。
DataTable
输出:
DataTable firstTable = new DataTable();
firstTable.Columns.Add("No of Specification", typeof(int));
firstTable.Columns.Add("OtherCol", typeof(string));
firstTable.Rows.Add(1, "A");
firstTable.Rows.Add(2, "B");
firstTable.Rows.Add(3, "C");
DataTable secondTable = new DataTable();
secondTable.Columns.Add("NoOfSpec", typeof(int));
secondTable.Columns.Add("OtherCol", typeof(string));
secondTable.Rows.Add(3, "F");
secondTable.Rows.Add(4, "G");
secondTable.Rows.Add(5, "H");
var mergedTable = firstTable.AsEnumerable().Select(dataRow => new { Key = dataRow["No of Specification"], Row = dataRow })
.Union(secondTable.AsEnumerable().Select(dataRow => new { Key = dataRow["NoOfSpec"], Row = dataRow }))
.GroupBy(a => a.Key, a => a.Row)
.Select(a => a.First())
.CopyToDataTable();
答案 1 :(得分:0)
SQL正在执行。我假设其他列相同。我给的另一列名为[value],在两个表中都存在。如果要合并更多列,则必须一一添加它们,因为两个不同名称的列正在合并。
SELECT L.[No Of Specification] as [No Of Specification], L.[value]
FROM [Data Table 1] L
UNION --if you know there can not be duplicates
SELECT R.[NoOfSpec], R.[value]
FROM [Data Table 2] R
ORDER BY [No Of Specification]