我有两个表,一个是发票表,另一个是发票上帐户的层次表
发票表:
| InvoiceNo| AccNo| InvoiceAmount |
--------------------------------------
| A1234| 345| 100.00 |
| A1235| 346| 95.00 |
| A1236| 347| 15.50 |
| A1237| 348| 20.10 |
层次结构表
| AccNo| HierAccNo| Level|
--------------------------------------
| 123| | 1 |
| 789| 123| 2 |
| 890| 123| 2 |
| 345| 789| 3 |
| 346| 789| 3 |
| 347| 890| 3 |
| 348| 890| 3 |
我尝试做的是将发票表中的金额汇总到最高级别的AccNo(级别1),然后将最高级别的实例从最高帐号回滚到下一级别。< / p>
到目前为止,我可以通过以下方式累计到最高的乐队编号:
var BandL2 = from invoice in db.Invoices//Roll up to level 2
join ban in db.HierarchyTable
on invoice.AccNo equals ban.Ban
where invoice.GlobalInvoiceID == globalInvoice.Id
group invoice by ban.HierAccNo into bandHierarchy
select new
{
Level2Band = bandHierarchy.Key,
Amount = bandHierarchy.Sum(m=> m.InvoiceAmount)
};
var bandHierarchyTable = db.HierarchyTable.AsQueryable();
var BandL1 = from band2 in BandL2 // Roll Up to level 1
join band1 in bandHierarchyTable
on band2.Level2Band equals band1.Ban
group band2 by band1.HierAccNo into bandL1
select new
{
Level1Band = bandL1.Key,
Amount = bandL1.Sum(m => m.Amount)
};
但是现在我有一个问题正在逆转这个过程并从第1级向下钻取,因为表单中的唯一细节是第1级的AccNo(例如123)。 我正在尝试使用弹出模式动态执行此操作,因为我正在钻井。
如何再次向下钻取以便我可以逐级获取金额? 例如:
以上代码中的输出表
| AccNo| Amount|
--------------------------------------
| 123| 230.60 |
然后
| AccNo| Amount|
--------------------------------------
| 789| 195 |
| 890| 35.60|
然后点击其中一个AccNo。
| AccNo| Amount|
--------------------------------------
| 345| 100|
| 346| 95 |
谢谢!
答案 0 :(得分:0)
看起来只有叶子帐户可以附加发票,所以获取帐号,检查它是否是叶子帐户,如果它是叶子它应该是这样的;
var hierAccNo = 123;
var details = from invoice in db.Invoices
join ban in db.HierarchyTable
on invoice.AccNo equals ban.Ban
where invoice.GlobalInvoiceID == globalInvoice.Id
and ban.HierAccNo = HierAccNo;
如果它不是叶子你想要你在1级的原始查询,我想得到小计。
var BandL2 = from invoice in db.Invoices//Roll up to level 2
join ban in db.HierarchyTable
on invoice.AccNo equals ban.Ban
where invoice.GlobalInvoiceID == globalInvoice.Id and ban.HierAccNo = hierAccNo // dont skip this
group invoice by ban.HierAccNo into bandHierarchy
select new
{
Level2Band = bandHierarchy.Key,
Amount = bandHierarchy.Sum(m=> m.InvoiceAmount)
};