我有一个带有列的表chequeBounce
帐户ID,帐户名,Chdate,chno,chamount
现在,我正在创建一个查询,该查询将得出一个月中Accountid
的计数。我需要根据用户选择的日期,用上个月的值增加当前Accountid
月的计数。
任何人都可以指导吗?
答案 0 :(得分:0)
很难从问题中确切知道您想要的是什么,但是我自己做了一些假设,并提出了可以满足您需要的存储过程。我选择存储过程的原因是因为您暗示应该有一个用户定义的变量。
因此,首先,创建此存储过程:
CREATE PROCEDURE dbo.Get_Count
@month1 int,
@month2 int
AS
SELECT [source].AccountName, sum([source].chamount) as [sum of amount], count([source].AccountID) as [no of AccountID in specified months] FROM
(SELECT
AccountID, AccountName, chno, chamount
FROM chequeBounce
WHERE
MONTH(Chdate) = @month1
UNION ALL
SELECT
AccountID, AccountName, chno, chamount
FROM chequeBounce
WHERE
MONTH(Chdate) = @month2) as [source]
GROUP BY [source].AccountID, [source].AccountName, [source].chamount
RETURN 0
此存储过程采用两个参数@month1
和@month2
。然后,它运行两个查询。一个具有与@month1
匹配的where语句,另一个具有与@month2
完全相同的语句。然后,将它们合并为一个查询,并计算指定月份每个AccountID
上有多少个条目。因此,以相同的方式总计金额。您可以通过键入exec Get_Count
来运行该过程,然后键入两个月。这样,如果您想要二月和三月:
exec Get_Count 2, 3
上述查询的结果可能类似于:
AccountName sum of amount no of AccountID in specified months
-------------------------------------------------- --------------------- ---------------
NameOne 200.00 2
NameTwo 100.00 1
NameThree 100.00 1
NameFour 200.00 2
NameFive 100.00 1
在此示例中,no of AccountID in specified months
是指定月份(2、3)中每个accountID上出现次数的计数。
这是我使用的数据:
create table chequeBounce (
AccountID int,
AccountName varchar(50),
Chdate date,
chno int,
chamount money,
)
insert into chequeBounce VALUES
(1, 'NameOne', GETDATE(), 123, 100)
,(2, 'NameTwo', GETDATE(), 123, 100)
,(3, 'NameThree', GETDATE(), 123, 100)
,(4, 'NameFour', GETDATE(), 123, 100)
,(5, 'NameFive', GETDATE(), 123, 100)
,(1, 'NameOne', DATEADD(mm, -1, GETDATE()), 123, 100)
,(2, 'NameTwo', DATEADD(mm, -2, GETDATE()), 123, 100)
,(4, 'NameFour', DATEADD(mm, -4, GETDATE()), 123, 100)
,(5, 'NameFive', DATEADD(mm, -5, GETDATE()), 123, 100)
,(1, 'NameOne', DATEADD(mm, -2, GETDATE()), 123, 100)
,(2, 'NameTwo', DATEADD(mm, -3, GETDATE()), 123, 100)
,(4, 'NameFour', DATEADD(mm, -5, GETDATE()), 123, 100)
,(4, 'NameFour', DATEADD(mm, -3, GETDATE()), 123, 100)
,(4, 'NameFour', DATEADD(mm, -1, GETDATE()), 123, 100)
,(5, 'NameFive', DATEADD(mm, -1, GETDATE()), 123, 100)
,(1, 'NameOne', DATEADD(mm, -5, GETDATE()), 123, 100)
,(3, 'NameThree', DATEADD(mm, -1, GETDATE()), 123, 100)
,(4, 'NameFour', DATEADD(mm, -1, GETDATE()), 123, 100)
,(5, 'NameFive', DATEADD(mm, -3, GETDATE()), 123, 100)