1

我有一个这样的订单表


ID OrderNumber 项目数量小计 OrderedBy

1 2012-0001-12 芭比娃娃 1 10 托马斯
2 2012-0001-12 肯 2 20 托马斯
3 2012-0001-23 米奇 4 28 托马斯
4 2012-0001-23 米妮 3 21 托马斯
5 2012-0002-12 芭比娃娃 1 10 彼得
6 2012-0003-01 蛋糕 1 12 托马斯
7 2012-0003-02 葡萄酒 1 70 托马斯

在 OrderNumber 中,前两部分(即第一行2012-001)是实际的订单 ID。
附加的最后一部分是在这种情况下不相关的供应商ID。

所以这个表现在有三个订单


OrderNumber OrderCount Total OrderedBy

2012-0001 4 79 托马斯
2012-0002 1 10 彼得
2012-0003 2 82 托马斯

目前,我在SELECT从数据库中获取所有内容并在2012-0001更改为2012-0002. 同时,我还在循环中添加 itemCount 和 total。

有没有办法在没有这么多麻烦的情况下在表(sql)或可枚举集合(linq)中获取订单?

4

3 回答 3

1

如果您只是想创建第二个表,那么您可以尝试以下操作:

SELECT SUBSTRING(OrderNumber, 1, 9) AS OrderNumber
    , COUNT(*) AS OrderCount
    , SUM(Subtotal) AS Total
    , OrderedBy
FROM [Table]
GROUP BY SUBSTRING(OrderNumber, 1, 9), OrderedBy

这假设单个订单将始终由同一个人完成。

于 2012-04-24T05:52:53.987 回答
1

子字符串会起作用吗?http://msdn.microsoft.com/en-us/library/ms187748.aspx

SELECT SUBSTRING(OrderNumber, 1, 9) AS OrderNumber ...
于 2012-04-24T05:59:02.073 回答
1
var summary = from drow in dataTable.AsEnumerable()
                      let grp = drow["OrderNumber"].ToString().Substring(0, drow["OrderNumber"].ToString().LastIndexOf("-"))
                      group drow by grp into g
                      select new {OrderNumber = g.Key, 
                                    OrderCount = g.Sum(x => Convert.ToInt32(x["Quantity"])),
                                    Total = g.Sum(y => Convert.ToInt32(y["Subtotal"])),
                                  OrderedBy = g.Select( n => n["OrderedBy"].ToString()).First()
                      };
于 2012-04-24T06:19:44.283 回答