sql server 中取出今年和去年每个月的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 中取出今年和去年每个月的数据相关的知识,希望对你有一定的参考价值。

sql server 中取出今年和去年每个月的数据,形成:
month date1 date2

1月:2014年1月的数据,2013年1月的数据;
2月:2014年2月的数据,2013年2月的数据;
..........

注释:今年和去年某个月的数据可能不存在。
会有:今年有、去年没有;今年没有、去年有;今年、去年都没有的情况。
请注意:我要取的是今年、去年的数据,这些数据应该是同一字段的。

select date2 as Data2013,date1 as Data2014,month from table
order by month

追问

我要显示每个月的数据,即使当月,今年、去年的数据不存在,我也要显示。

也就是说明,数据库中,这个没有去年、今年数据的月份month是没有的。
那么Order by也就少了相印的月份了吧

追答select (case when date2 then date2 else 'no Data' end ) as Data2013,
         (case when date1 then date1 else 'no Data' end ) as Data2014,
        month 
from table
order by month

追问

你的回答让我思路有点清晰啦,
不过,有一个问题,我说的是2014年的数据、2013年的数据。
明显是一个字段的不同年份,而你给我的是不同字段的,也没有限制年份。

追答

你给的结构就是不同字段的呀,如果有同一个字段,思路也是一样的


select *
from table
group by date
order by date,month

楼主给分吧~

追问

大哥,你没有按照我问的问题给我明确的答案啊。
我要的是每个月一个字段:2014年的数据、2013的数据,
你给我的答案是,每个月每年、字段1、2的所有数据,
把难点:确定年份同一字段给避过了,我怎么给你分啊。
拜托!
能给我写下么??
可以加100分的哟!!!

追答

举个栗子说清楚你的意思,被你搞蒙了,不知所云啊。。

追问

比如:我有一个数据 金额:rmb,我要取出物品:A,在今年、去年中每个月的金额rmb。
难点在于,每个月 1,2,3,4,5,6,7,8,9,10,11,12不论在这两年是否有都要出现。今年、去年都没有的情况会导致order by month的时候出现少月份的情况。
不能追加分了····

追答

是问你的数据表是什么结构。。

男子汉大丈夫怎能出尔反尔。。。

追问

这个真心不是我出尔反尔,悬赏最高分才知道是200分·····骗你小狗!!!
rmb 金额
odate 生效日期
month 月份

thing 货物

追答

现在可是很认真去回答了,你参考下


set @idx int 1;
set @data2013 = select * from table where odate='2013';
set @data2014 = select * from table where odate='2014';
create table #results=(
    id int,
    rmb2013 int,
    rmb2014 int
  );
while(@idx<13)
begin
  insert into #results (idx,
  select case when rmb then rmb else ' ' endfrom @data2013,
  select case when rmb then rmb else ' ' endfrom @data2014
  )
  set @idx = @idx + 1
end

参考技术A 你完全可以提供一个年份,依次查询某年某个月的数据,把对应的年份、月份、还有数据都放到一个List里啊。

SQL语句。表里面都是去年的数据。现在要统计以前每一天跟每一个月的数据的总数。SQL语句怎么写。

--每天数据量
select convert(char(8),date,112) 年月日,COUNT() ROW_COUNT
FROM TableName
group by convert(char(8),date,112)
--每月数据量
select convert(char(6),date,112) 年月,COUNT(*) ROW_COUNT
FROM TableName
group by convert(char(6),date,112)
--如果只有一年,每月数据量也可以如下:
select MONTH(date) 月,COUNT(*) ROW_COUNT
FROM TableName
group by MONTH(date)追问

比如表里面有2010年8,9,10月份的数据。那怎么统计每天跟每月的数据的总数啊。能具体点吗。

追答

时间字段的格式是什么样子的?一个datetime类型的字段?

参考技术A --每天数据量
select convert(char(8),date,112) 年月日,COUNT() ROW_COUNT
FROM TableName
group by convert(char(8),date,112)
每月数据量
select convert(char(6),date,112) 年月,COUNT(*) ROW_COUNT
FROM TableName
group by convert(char(6),date,112)追问

比如表里面有2010年8,9,10月份的数据。那怎么统计每天跟每月的数据的总数啊。能具体点吗。

以上是关于sql server 中取出今年和去年每个月的数据的主要内容,如果未能解决你的问题,请参考以下文章

sql server 查询本年的每个月的数据

获取每个月的第一个日期 SQL Server 2008 R2

php+mysql中怎么查询最近12个月每个月的数据

sql 今年和去年的SQL YTD。此查询可确保去年的值仅上升到当天的整个年份

SQL语句。表里面都是去年的数据。现在要统计以前每一天跟每一个月的数据的总数。SQL语句怎么写。

前 3 个月的滚动总和 SQL Server