使用T-SQL在联接中计算列
我想显示一个人申请的总数 我试过这个:使用T-SQL在联接中计算列,sql,sql-server,tsql,group-by,aggregate-functions,Sql,Sql Server,Tsql,Group By,Aggregate Functions,我想显示一个人申请的总数 我试过这个: SELECT DISTINCT custID, firstName, AppID, AppDate, Amount FROM CustTable JOIN AppTable ON custID = AppID 我有很多行每个客户,并希望每个客户的申请总额 现在我看到了这样的情况: 1 | Jon | APP_1 | 200 1 | Jon | APP_2 | 200 1 | Jon | APP_3 | 200 1 | Jon | APP_4 | 200
SELECT DISTINCT custID, firstName, AppID, AppDate, Amount
FROM CustTable
JOIN AppTable ON custID = AppID
我有很多行每个客户,并希望每个客户的申请总额
现在我看到了这样的情况:
1 | Jon | APP_1 | 200
1 | Jon | APP_2 | 200
1 | Jon | APP_3 | 200
1 | Jon | APP_4 | 200
select custID, firstName, sum(Amount),
min(AppDate) firstDate, max(AppDate) lastDate,
FROM CustTable
JOIN AppTable
ON custID = AppID
group by custID, firstName
1 | Jon | 800 | 2013-01-01 | 2013-01-28
但我想要(最好是日期范围):
根据表中的差异,我假设您也希望按AppDate对其进行分组:
SELECT custID, firstName, AppID, AppDate, SUM(Amount) AS Amount
FROM CustTable
JOIN AppTable
ON custID = AppID
GROUP BY custID, firstName, AppID, AppDate
您的结果列表没有AppDate,因此,如果不按AppDate对值进行分组,则必须在不使用以下内容的情况下进行分组:
SELECT custID, firstName, AppID, SUM(Amount) AS Amount
FROM CustTable
JOIN AppTable
ON custID = AppID
GROUP BY custID, firstName, AppID
如果你想
1 | Jon | APP_1 | 800
在您的示例中,使用按字母顺序排列的第一个应用程序id作为名称,如下所示
SELECT custID, firstName, MIN(AppID) AS AppID, SUM(Amount) AS Amount
FROM CustTable
JOIN AppTable
ON custID = AppID
GROUP BY custID, firstName
但老实说,在结果中加入APP_1没有多大意义。你可以这样做:
select custID, firstName, sum(Amount)
FROM CustTable
JOIN AppTable
ON custID = AppID
group by custID, firstName
将返回以下内容:
1 | Jon | 800
此外,您还可以设置如下日期范围:
1 | Jon | APP_1 | 200
1 | Jon | APP_2 | 200
1 | Jon | APP_3 | 200
1 | Jon | APP_4 | 200
select custID, firstName, sum(Amount),
min(AppDate) firstDate, max(AppDate) lastDate,
FROM CustTable
JOIN AppTable
ON custID = AppID
group by custID, firstName
1 | Jon | 800 | 2013-01-01 | 2013-01-28
它将返回如下内容:
1 | Jon | APP_1 | 200
1 | Jon | APP_2 | 200
1 | Jon | APP_3 | 200
1 | Jon | APP_4 | 200
select custID, firstName, sum(Amount),
min(AppDate) firstDate, max(AppDate) lastDate,
FROM CustTable
JOIN AppTable
ON custID = AppID
group by custID, firstName
1 | Jon | 800 | 2013-01-01 | 2013-01-28
这是一个基本的
分组依据
查询:
SELECT custID, COUNT(*) as Num, SUM(Amount) as TotalAmount
FROM CustTable JOIN AppTable
ON custID = AppID
group by custId
然而,我看不到第三列“APP1”在输出中的作用。APP_1到APP_N似乎是AppId,而不是日期…@Quandary适时地指出,我读问题太快了。刚刚解决了这个问题是的,我也遇到过;)这是一个愚蠢的问题:)你真的需要报告中的APP_1吗?我在你的输出中没有看到firstName