2017-04-17 73 views
0

我有包含Id,日期和状态的表,即打开/关闭 我只想在sql中包含明智的开放,关闭和Id的总数的结果 例如在Jan Jan open计数15,靠近计数5和总计数20如何获得特定行的计数

+0

提示:'GROUP BY'。 –

+1

可以给我举个例子 – WeeZy

+1

你用什么数据库引擎? –

回答

0

使用汇总()和GROUP BY如下:

;WITH T AS 
(
    SELECT 
     Id,  
     DATENAME(MONTH,[Date]) AS [MonthName],   
     Status 
    FROM @tblTest 
) 
SELECT 
    [MonthName], 
    [Status], 
    StatusCount 
FROM 
(
    SELECT 
     MonthName, 
     CASE ISNULL(Status,'') WHEN '' THEN 'Total' ELSE Status END AS Status,   
     Count(Status) AS StatusCount       
    FROM T 
    GROUP BY ROLLUP([MonthName],[Status]) 
)X 
WHERE X.MonthName IS NOT NULL 
ORDER BY X.[MonthName],X.[Status] 

输出:

enter image description here

注:如果一个月单列所需的数据然后申请PIVOT

+0

你的ans是绝对正确的,并且正在为我工​​作,但是你能否只是详细说明你的答案... – WeeZy

+0

我觉得你很熟悉团队。另外还有RollUp和Cube功能,可以添加额外的行以添加组摘要/组页脚。阅读更多:https://oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets –

+0

也看看这里:http://stackoverflow.com/questions/7053471/understanding-立方体和汇总之间的差异 –

-1
select year(date), month(date), 
     sum(case when status = 'open' then 1 else 0 end) as open_count, 
     sum(case when status = 'closed' then 1 else 0 end) as closed_count, 
     count(*) as total_count 
from your_table 
group by year(date), month(date)