C# 如何在Microsoft Cosmos Scope中编写循环以逐行处理?

C# 如何在Microsoft Cosmos Scope中编写循环以逐行处理?,c#,u-sql,cross-join,cosmos,C#,U Sql,Cross Join,Cosmos,更新:我想做的一个例子: 现有表格: 1st Table name: DistinctAcctDay; Column name: ID int, AccountingDate datetime; Values: (1, 2017/05/01); (2, 2017/08/01); (3, 2017/09/01); 2nd Table name: TransferOut; Column name: AccountingDate datetime; Amount decimal

更新:我想做的一个例子:

现有表格:

1st Table name: DistinctAcctDay;
Column name: ID int, AccountingDate datetime;
Values: (1, 2017/05/01);
     (2, 2017/08/01);
     (3, 2017/09/01);


2nd Table name: TransferOut;
Column name: AccountingDate datetime; Amount decimal;
Values: (2017/01/01, 10);
(2017/02/01, 13);
(2017/06/25, 15);
(2017/08/03, 18);
(2017/08/08, 30);
我希望Cosmos脚本返回到3或n以下,这取决于当天之前所有历史数据总和的第一个表输出中存在多少行:

1第一表2017/05/01之前日期第二表中的金额:数字应为23

2第一表2017/08/01之前日期第二表中的金额:数字应为10+13+15=38

3第一个表2017/09/01之前日期第二个表中的金额:数字应为10+13+15+18+30=86

脚本应该在Cosmos中编写

感谢大家在未来的帮助

/////////////////////////

我的想法:

我想循环第一行,每次选择一行一个日期,并使用该日期作为从第二个表中导出数据的标准

如果是用sql编写的,它可能如下所示

Declare @Counter int,@MaxRowLimit int; 
Set @Counter =1;
Set @MaxRowLimit = (SELECT COUNT(*) FROM DistinctAcctDay);
WHILE @Counter <= @MaxRowLimit
BEGIN
  PickAcctDay=
  SELECT AccountingDay
  FROM DistinctAcctDayId
  WHERE ID =@Counter;

  TransferOut =
     SELECT SUM(Amount) FROM TransferOut
     WHERE AccountingDate <= PickAcctDay;   
   SET @Counter =@Counter +1
END
然而,它需要用USQL来写,我不熟悉USQL和C。我写了下面这样的东西,这是不正确的,我被绊倒了

int counter=1; int MaxRowLimit;
for (counter = 1; counter <= MaxRowLimit; counter++)
{
  DateTime PickAcctDay =
  SELECT AccountingDay
  FROM DistinctAcctDayId
  WHERE ID ==@Counter;

  TransferOut =
     SELECT SUM(Amount) FROM TransferOut
     WHERE AccountingDate <= PickAcctDay;
}

这是XY问题的一个主要示例。嗨,肖恩,我已经将我的原始问题/场景编辑得更清楚了,请随意查看和建议。谢谢你为什么要包括原始问题?它只会增加噪音,使您的问题难以理解。即使是SQL中的解决方案也是一个糟糕的解决方案。SQL是一种转换和组合行集的声明性语言。所以你们需要从语言代数的角度来思考,而不是试图把它强加在一个不同的范式中。大卫为你的问题给出了正确的答案。如果你把它标成这样就好了。
@DistinctAcctDay = 
SELECT * FROM 
    ( VALUES
    (1, new DateTime(2017,05,01)),
    (2, new DateTime(2017,08,01)),
    (3, new DateTime(2017,09,01))
    ) AS T(Id, AccountingDate);


@TransferOut = 
SELECT * FROM 
    ( VALUES
    (new DateTime(2017,01,01), 10),
    (new DateTime(2017,02,01), 13),
    (new DateTime(2017,06,25), 15),
    (new DateTime(2017,08,03), 18),
    (new DateTime(2017,08,08), 30)
    ) AS T(AccountingDate, Amount);

@result = 
       SELECT d.Id, SUM(Amount) AS sumAmount
       FROM  @DistinctAcctDay AS d
       CROSS JOIN @TransferOut AS t
       WHERE d.AccountingDate >= t.AccountingDate 
      // WHERE d.AccountingDate BETWEEN t.AccountingDate AND d.AccountingDate
       GROUP BY d.Id;