按计数和总计数分组

Par*_*h J 2 sql select group-by sql-server-2008

我试图找出如何通过查询得到以下结果,但无法做同样的事情.

表名:ProductMaster

ProductCode   Quantity   EntryDate
A1            10         10/03/2015
A1            10         15/03/2015
A2            10         18/03/2015
A2            10         25/03/2015
A1            10         10/04/2015
A2            10         15/04/2015
Run Code Online (Sandbox Code Playgroud)

我想获得结果如果我选择3月份,结果应该是:

ProductCode   MonthCount   TotalCount
A1            20           30         
A2            20           30
Run Code Online (Sandbox Code Playgroud)

如果我选择4月份,结果应为:

ProductCode   MonthCount   TotalCount
A1            10           30         
A2            10           30
Run Code Online (Sandbox Code Playgroud)

我的查询:

SELECT ProductCode, SUM(Quantity) 
FROM ProductMaster
WHERE DATEPART(MONTH, EntryDate) = @Month
GROUP BY ProductCode
Run Code Online (Sandbox Code Playgroud)

在哪里@month = 34基于输入.

另外,我如何获得产品代码的数量.对于Month = 3

ProductCode   MonthCount   TotalCount
A1            2            3         
A2            2            3
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 5

您可以使用case基于以下内容的表达式@Month:

SELECT   ProductCode, 
         SUM (CASE WHEN MONTH(EntryDate) = @Month THEN Quantity ELSE 0 END) 
           AS MonthCount,
         SUM (Quantity) AS TotalConount
FROM     ProductMaster
GROUP BY ProductCode
Run Code Online (Sandbox Code Playgroud)

编辑:
要回答编辑过的问题,您可以使用相同的技术count而不是sum:

SELECT   ProductCode, 
         COUNT (CASE WHEN MONTH(EntryDate) = @Month THEN Quantity ELSE NULL END) 
           AS MonthCount,
         COUNT (*) AS TotalConount
FROM     ProductMaster
GROUP BY ProductCode
Run Code Online (Sandbox Code Playgroud)