Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用T-SQL在联接中计算列_Sql_Sql Server_Tsql_Group By_Aggregate Functions - Fatal编程技术网

使用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