如何在SQL中添加Totals

时间:2014-05-20 15:49:40

标签: sql-server tsql

我试图从YTD获得每个月的总数(年初至今)有人可以帮我弄清楚如何在我的查询中集成它吗?谢谢你这是我到目前为止所做的。

DECLARE @Year int    
set @Year = 2013    
select  a.first_name,  a.last_name 
, COUNT(CASE WHEN  MONTH(b.Funded_date) = 1 THEN 1 ELSE NULL END) January
, COUNT(CASE WHEN  MONTH(b.Funded_date) = 2 THEN 1 ELSE NULL END) February
, COUNT(CASE WHEN  MONTH(b.Funded_date) = 3 THEN 1 ELSE NULL END) March
, COUNT(CASE WHEN  MONTH(b.Funded_date) = 4 THEN 1 ELSE NULL END) April
From tContact a Join tContract b ON a.contact_id = b.contract_id
Group by a.first_name,   a.last_name

5 个答案:

答案 0 :(得分:0)

这只是一个例子,说明如何计算一个月内的行数。

SELECT MONTH(b.Funded_date) AS 'MonthNum',
       COUNT(*) AS 'Total'
FROM Table AS b
WHERE YEAR(b.Funded_date) = 2014
GROUP BY MONTH(b.Funded_date)

希望这可以帮助您查询。

由于

答案 1 :(得分:0)

我在这里尝试做的是在tContract中为每个月创建一个上限记录,然后将其加入到您已有的查询中。它在年初和当月之间的日期加入。

DECLARE @Year int    
set @Year = 2013
select Ms.thismonth, count(B.thing_You_are_Totalling) from (
    select thisMonth = dateadd(month,datediff(month,0,Funded_date),0)
    from tContract
    where moid = 2005405
    and year(Funded_date) = @Year
    group by dateadd(month,datediff(month,0,Funded_date),0)
) Ms

inner join (select * from tContact a inner join tContract ON a.contact_id = tContract.contract_id)  B 
    on B.Funded_date >=dateadd(year,datediff(year,0,B.Funded_date),0) -- beginning of year
            and B.Funded_date <= Ms.thisMonth  -- this month
where year(B.Funded_date) = @Year          -- restrict to only this year
    group by thisMonth, first_name,   last_name

我没有完整的表定义,因此可能存在一些问题(可能是SqlFiddle的顺序)

答案 2 :(得分:0)

不确定这是否是您所要求的。

select  a.first_name,  a.last_name 
, COUNT(CASE WHEN MONTH(b.Funded_date) = 1 THEN 1 ELSE NULL END) January
, COUNT(CASE WHEN MONTH(b.Funded_date) = 2 THEN 1 ELSE NULL END) February
, COUNT(CASE WHEN MONTH(b.Funded_date) = 3 THEN 1 ELSE NULL END) March
, COUNT(CASE WHEN MONTH(b.Funded_date) = 4 THEN 1 ELSE NULL END) April
, COUNT(*) TotalCount
, SUM(CASE WHEN MONTH(b.Funded_date) = 1 THEN Amount ELSE NULL END) JanuaryAmount
, SUM(CASE WHEN MONTH(b.Funded_date) = 2 THEN Amount ELSE NULL END) FebruaryAmount
, SUM(CASE WHEN MONTH(b.Funded_date) = 3 THEN Amount ELSE NULL END) MarchAmount
, SUM(CASE WHEN MONTH(b.Funded_date) = 4 THEN Amount ELSE NULL END) AprilAmount

From tContact a Join tContract b ON a.contact_id = b.contact_id
WHERE YEAR(b.Funded_date) = @Year
Group by a.first_name,   a.last_name

答案 3 :(得分:0)

这个怎么样:

declare @year int = 2013

select a.first_name
       , a.last_name 
       , month(b.Funded_date) [Month]
       , datename(month, dateadd(month, month(date_of_birth_dt), - 1)) [MonthName]
       , count(month(b.Funded_date)) [Total]
  from tContact a 
 where a.[Year] = @year
 group by a.first_name, a.last_name, month(b.Funded_date)

它返回2013年每个月的总数。a.[Year]可能不是您所拥有的字段的名称,因此进行相应调整。此外,[Month]会返回月份的数值。

答案 4 :(得分:0)

使用Count(*)As Total函数。我相信这会对你有所帮助

SELECT MONTH(b.Funded_date) AS 'MonthNum',
    COUNT(*) AS 'Total'
FROM Table AS b
WHERE YEAR(b.Funded_date) = 2014
GROUP BY MONTH(b.Funded_date)