繁体   English   中英

如何获取 SQL Server 2014 中的记录数和总和?

[英]How to get count and sum of records in SQL Server 2014?

我有一个包含以下字段的表:

  1. 帐号
  2. 当前余额
  3. 状态ID
  4. 上次交易

StatusID 可以是 1、2 或 11。

我想显示状态 1、2 和 11 中的 AccountNumbers 计数以及每个状态中所有账户的 CurrentBalance 总和,并且 LastTransaction 超过 6 个月。

到目前为止我的代码:

SELECT Count(AccountNumber) NoOfAccts
      ,SUM(CurrentBalance) TotalBalance          
      ,StatusId

FROM Accounts
WHERE DATEDIFF (DAY, LastTransaction, GETDATE()) > 180
GROUP BY AccountNumber, StatusId

此代码为我提供了每个帐户的单独行

|NoOfAccounts | TotalBalance | StatusId|
-----------------------------------------
|           1 |       364.24 |        1|
-----------------------------------------
|           1 |       856.25 |        2|
-----------------------------------------
|           1 |       189.24 |        1|
-----------------------------------------

等等...

我的示例数据如下:

|AccountsNumbr|CurrentBalance| StatusId| LastTransaction|
---------------------------------------------------------
|      215481 |       364.24 |        1| 2018=01-05     |
---------------------------------------------------------
|      215587 |       856.25 |        2| 2017=05-02     |
---------------------------------------------------------
|      216744 |       189.24 |        1| 2017=03-21     |
---------------------------------------------------------
|      548756 |       693.15 |        1| 2017=08-20     |
---------------------------------------------------------
|      235687 |       547.69 |        1| 2018=03-21     |
---------------------------------------------------------
|      895647 |       786.65 |       11| 2017=02-28     |
---------------------------------------------------------

下面这个怎么样。 注意分组。 您在 Group By 中有 AccountNumber。

--sample data
IF object_id('tempdb..#Accounts') is not null drop table #Accounts
CREATE TABLE #Accounts (AccountNumber INT, CurrentBalance MONEY, StatusID INT, LastTransaction DATE)
INSERT INTO #Accounts (AccountNumber,CurrentBalance,StatusID,LastTransaction) VALUES
(1, 100, 1, DATEADD(MONTH,-3, GETDATE())),
(2, 200, 2, DATEADD(MONTH,-4, GETDATE())),
(3, 50, 11, DATEADD(MONTH,-7, GETDATE())), -- older than 6 months
(4, 300, 1, DATEADD(MONTH,-8, GETDATE())), -- older than 6 months
(5, 10, 2, DATEADD(MONTH,-10, GETDATE())), --older than 6 months 
(6, 20, 11, DATEADD(MONTH,-12, GETDATE())), --older than 6 months 
(7, 5, 1, DATEADD(MONTH,-1, GETDATE())),
(8, 50, 2, DATEADD(MONTH,-2, GETDATE())),
(9, 100, 11, DATEADD(MONTH,-4, GETDATE())),
(10, 400, 1, DATEADD(MONTH,-11, GETDATE())) --older than 6 months

--query
SELECT  StatusID,
        COUNT(AccountNumber) AS 'Accounts',
        SUM(CurrentBalance) AS 'CurrentBalance'
FROM #Accounts
WHERE LastTransaction < DATEADD(Month,-6, GETDATE())
GROUP BY StatusID

输出 - 根据临时表数据,这是正确的

StatusID    Accounts    CurrentBalance
1              2           700.00
2              1           10.00
11             2           70.00

如果您需要对 AccountNumber 进行计数,您现在应该在同一查询中使用 in count 和 group by

所以你应该使用

SELECT Count(AccountNumber) NoOfAccts
  ,SUM(CurrentBalance) TotalBalance          
  ,StatusId

FROM Accounts
WHERE DATEDIFF (DAY, LastTransaction, GETDATE()) > 180
GROUP BY StatusId

SELECT Count(*) NoOfAccts
  ,SUM(CurrentBalance) TotalBalance          
  ,StatusId

FROM Accounts
WHERE DATEDIFF (DAY, LastTransaction, GETDATE()) > 180
GROUP BY StatusId,  AccountNumber

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM