我正在使用C#和SQL Server
在一个月内,按AccountNo分开,必须输出3天内超过10,000金额的所有交易。
这是一个示例表:
AccountNo-----Date------------Amount
1-------------5/1/17----------8000
1-------------5/3/17----------1000
1-------------5/4/17----------1000
1-------------5/6/17----------1000
2-------------5/7/17----------3000
2-------------5/10/17---------2000
2-------------5/13/17---------2000
2-------------5/13/17---------3000
3-------------5/14/17---------3000
3-------------5/15/17---------3000
3-------------5/16/17---------9000
4-------------5/17/17---------1000
5-------------5/18/17---------1000
5-------------5/19/17---------1000
5-------------5/20/17---------1000
结果必须是:
AccountNo-----Date------------Amount
1-------------5/1/17----------8000
1-------------5/3/17----------1000
1-------------5/4/17----------1000
2-------------5/7/17----------3000
2-------------5/10/17---------2000
2-------------5/13/17---------2000
2-------------5/13/17---------3000
3-------------5/14/17---------3000
3-------------5/15/17---------3000
3-------------5/16/17---------9000
有一个代码给我,但它还没有完全正常工作。
Select A.*
From YourTable A
Cross Apply (
Select RT1 = sum(case when [Date] <= B2.TstDate then [Amount] else 0 end)
,RT2 = sum(case when [Date] >= B2.TstDate then [Amount] else 0 end)
From YourTable B1
Cross Join (Select TstDate=A.[Date]) B2
Where [Date] between DateAdd(DAY,-2,A.[Date]) and DateAdd(DAY,2,A.[Date])
and Year([Date])=Year(TstDate)
and Month([Date])=Month(TstDate)
) B
Where RT1>=10000 or RT2>=10000
答案 0 :(得分:1)
什么是逻辑问题。第一次就做对了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication60
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Amount", typeof(int));
DataTable dt2 = dt.Clone();
dt.Rows.Add(new object[] { DateTime.Parse("5/1/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/2/17"), 4000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/3/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/4/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/5/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/6/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/7/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/8/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/9/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/10/17"), 3000 });
dt.Rows.Add(new object[] { DateTime.Parse("5/11/17"), 4000 });
for (int rowNumber = 0; rowNumber < dt.Rows.Count; rowNumber++)
{
Boolean exceeds = false;
switch (rowNumber)
{
case 0:
exceeds = (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] + (int)dt.Rows[rowNumber + 2]["Amount"] >= 10000 ? true : false;
break;
case 1:
exceeds = ((int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] >= 10000 ? true : false) ||
((int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] + (int)dt.Rows[rowNumber + 2]["Amount"] >= 10000 ? true : false);
break;
default:
if (rowNumber < dt.Rows.Count - 3)
{
exceeds = ((int)dt.Rows[rowNumber - 2]["Amount"] + (int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] >= 10000 ? true : false) ||
((int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] >= 10000 ? true : false) ||
((int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] + (int)dt.Rows[rowNumber + 2]["Amount"] >= 10000 ? true : false);
}
if (rowNumber == dt.Rows.Count - 2)
{
exceeds = ((int)dt.Rows[rowNumber - 2]["Amount"] + (int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] >= 10000 ? true : false) ||
((int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] >= 10000 ? true : false);
}
if (rowNumber == dt.Rows.Count - 1)
{
exceeds = ((int)dt.Rows[rowNumber - 2]["Amount"] + (int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] >= 10000 ? true : false);
}
break;
}
if (exceeds)
{
dt2.Rows.Add(new object[] { dt.Rows[rowNumber]["Date"], dt.Rows[rowNumber]["Amount"] });
}
}
}
}
}