我有两张桌子。
我需要将它们合并到一个表中,其中包含数字列的复合行,其中item_id是相同的。
表中的行数很大,因此在这里可以很好地判断最快的处理解决方案。
表1:
item_id|item_name|qty|col1|col2|col3|
===============================================
1 |apple |5 |xxx |xxx |xxx |
2 |orange |10 |xxx |xxx |xxx |
3 |tomato |7 |xxx |xxx |xxx |
表2:
item_id|item_name|qty|col1|col2|col3|
===============================================
1 |apple |5 |xxx |xxx |xxx |
3 |tomato |5 |xxx |xxx |xxx |
4 |squash |1 |xxx |xxx |xxx |
===>表结果:
item_id|item_name|qty|col1|col2|col3|
===============================================
1 |apple |10 |xxx |xxx |xxx | (sum qty: 10)
2 |orange |10 |xxx |xxx |xxx |
3 |tomato |12 |xxx |xxx |xxx | (sum qty: 12)
4 |squash |1 |xxx |xxx |xxx |
谢谢。
答案 0 :(得分:0)
最直接的解决方案是使用UNION
上的GROUP BY
然后使用item_id
SUM
使用qty
字段上的SELECT * FROM Table1
UNION
SELECT * FROM Table2
功能,例如:
DataTable
等等。
在C#中,table3 = Table1.Copy();
table3.Merge(Table2);
合并操作可以按如下方式实现:
table3
然后您可以遍历结果LINQ
或使用i = 0
while i < 2:
numbers = float(input('Enter number: '))
numbers += numbers
print(numbers)
limit = 101
i += 1
if numbers >= limit:
print("Over 100")
else:
print("Working")
。
(注意:你的问题是一种通用的,所以答案也是通用的)。
希望这会有所帮助。
答案 1 :(得分:0)
我从未使用过C#datatable
,但是一个简单的循环可以做你想要的。
foreach(row1 in datatable1.Rows)
{
foreach(row2 in datatable2.Rows)
{
if (!datatable3.Rows.Contains(row1))
datatable3.Rows.Add(row1)
if (!datatable3.Rows.Contains(row1))
datatable3.Rows.Add(row1)
if (row1.id == row2.id)
datatable3.row.qty = row1.qty + row2.qty
}
}
答案 2 :(得分:0)
您可以将两个DataTable放在var或列表中,然后您可以通过以下方式进行分组:
var listadoTabla1 = new List<Table1>
{
new Table1{ item_id=1, item_name="apple", qty=5 },
new Table1{ item_id=2, item_name="orange", qty=10 },
new Table1{ item_id=3, item_name="tomato", qty=7 }
};
var listadoTabla2 = new List<Table1>
{
new Table1{ item_id=1, item_name="apple", qty=5 },
new Table1{ item_id=3, item_name="tomato", qty=1 },
new Table1{ item_id=4, item_name="squash", qty=5 }
};
var listadoResultado = listadoTabla1;
listadoResultado.AddRange(listadoTabla2);
var resultado = (from x in listadoResultado
group x by new { x.item_id, x.item_name }
into grp
select new Table1
{
item_id = grp.Key.item_id,
item_name = grp.Key.item_name,
qty = grp.Sum(x=>x.qty)
}).ToList();
见啊!