sql2008如何从数据库获取1至12月的数据

时间:2022-01-23 09:33:16
sql2008如何从数据库获取1至12月的数据
select 
 sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
     sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
     sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
     sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
     sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon
      from min_customs where datediff(mm,cus_time,getdate())=0

表结构
sql2008如何从数据库获取1至12月的数据
现在我只是获取当前月的数据,但我想要的是1至12月的数据,然后将这些数据放在dataset中!江湖救急!! sql2008如何从数据库获取1至12月的数据谢谢!

15 个解决方案

#1


datediff( yy,

#2


1-12月的数据 你想怎么排?显示成什么样子?

#3


如果还是这样的话 

select 
  sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
      sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
      sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
      sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
      sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon
       from min_customs where datediff(year,cus_time,getdate())=0
 

#4


不是的,应该是每一个月 “未确认、确认、看房、签约、已放弃”这些字段的数据总和,总共有12个月!这是我要做C#折线图要用到的!是我没说清楚,你能帮我再看一下吗?谢谢!

#5


sql2008如何从数据库获取1至12月的数据
将字段为null该为0,还有这个问题??帮忙看一下,谢谢!

#6


nullif()不能实现!我试过了!

#7


假设你的数据只有2014年的。
select yuefen,cus_status,count(cus_status) as amount  from (
select month(cus_time) as yuefen,cus_status from min_customs
) as a group by yuefen,cus_status order by yuefen

如果不是你要的结果,你还是把结果贴出来,不然不知道你要的是什么。

#8


感觉楼主是想要2014年 对月份分组, 然后得出各个状态的的行数。

select 
 sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
     sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
     sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
     sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
     sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon,
      from min_customs where datepart(yy,cus_time)='2014'
group by datepart(mm,cus_time)

#9


恩!@alimake的理解是对的! sql2008如何从数据库获取1至12月的数据
但现在只是显示有数据的页面,我想显示的是所有月份的行,不管里面有没有数据!有个字段标志每一行是几月份!再次求指点~~~ sql2008如何从数据库获取1至12月的数据实现的我再会20分给大家的!谢谢

#10


   
   select 
 sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
     sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
     sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
     sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
     sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon,month(cus_time) as yue
      from min_customs where datepart(yy,cus_time)='2014'
group by datepart(mm,cus_time),month(cus_time) 
sql2008如何从数据库获取1至12月的数据
月份已经出来了!只差显示的是所有月份的行,不管里面有没有数据!! sql2008如何从数据库获取1至12月的数据帮帮忙,大家!!!

#11


 SELECT    a.number AS yue,
            b.cus_none ,
            b.cus_confirm ,
            b.cus_abandon ,
            b.cus_sign ,
            b.cus_abandon
  FROM      ( SELECT    number
              FROM      master..spt_values P
              WHERE     type = 'P'
                        AND number BETWEEN 1 AND 12
            ) a
            LEFT JOIN ( SELECT  SUM(CASE WHEN cus_status = '未确认' THEN 1
                                         ELSE 0
                                    END) AS cus_none ,
                                SUM(CASE WHEN cus_status = '确认' THEN 1
                                         ELSE 0
                                    END) AS cus_confirm ,
                                SUM(CASE WHEN cus_status = '看房' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                SUM(CASE WHEN cus_status = '签约' THEN 1
                                         ELSE 0
                                    END) AS cus_sign ,
                                SUM(CASE WHEN cus_status = '已放弃' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                MONTH(cus_time) AS yue
                        FROM    min_customs
                        WHERE   DATEPART(yy, cus_time) = '2014'
                        GROUP BY DATEPART(mm, cus_time) ,
                                MONTH(cus_time)
                      ) b ON a.number = b.yue


参考 

#12


@OrchidCat,非常感谢!已经出来了! sql2008如何从数据库获取1至12月的数据
但是nullif不管用,我想将字段为null改为数字0!!大家能帮我再看一下吗?谢谢!

#13


SELECT    a.number AS yue,
           isnull( b.cus_none ,0),
            isnull(b.cus_confirm ,0),
            isnull(b.cus_abandon ,0),
           isnull( b.cus_sign ,0),
           isnull( b.cus_abandon,0)
  FROM      ( SELECT    number
              FROM      master..spt_values P
              WHERE     type = 'P'
                        AND number BETWEEN 1 AND 12
            ) a
            LEFT JOIN ( SELECT  SUM(CASE WHEN cus_status = '未确认' THEN 1
                                         ELSE 0
                                    END) AS cus_none ,
                                SUM(CASE WHEN cus_status = '确认' THEN 1
                                         ELSE 0
                                    END) AS cus_confirm ,
                                SUM(CASE WHEN cus_status = '看房' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                SUM(CASE WHEN cus_status = '签约' THEN 1
                                         ELSE 0
                                    END) AS cus_sign ,
                                SUM(CASE WHEN cus_status = '已放弃' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                MONTH(cus_time) AS yue
                        FROM    min_customs
                        WHERE   DATEPART(yy, cus_time) = '2014'
                        GROUP BY DATEPART(mm, cus_time) ,
                                MONTH(cus_time)
                      ) b ON a.number = b.yue


试试

#14


ok!我怎么没想到!谢谢大家了! sql2008如何从数据库获取1至12月的数据

#15


共同学习啊  刚入行IT啊 就知道一点T-SQL 其他 复制 备份 啥的 完全不懂啊 

#1


datediff( yy,

#2


1-12月的数据 你想怎么排?显示成什么样子?

#3


如果还是这样的话 

select 
  sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
      sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
      sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
      sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
      sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon
       from min_customs where datediff(year,cus_time,getdate())=0
 

#4


不是的,应该是每一个月 “未确认、确认、看房、签约、已放弃”这些字段的数据总和,总共有12个月!这是我要做C#折线图要用到的!是我没说清楚,你能帮我再看一下吗?谢谢!

#5


sql2008如何从数据库获取1至12月的数据
将字段为null该为0,还有这个问题??帮忙看一下,谢谢!

#6


nullif()不能实现!我试过了!

#7


假设你的数据只有2014年的。
select yuefen,cus_status,count(cus_status) as amount  from (
select month(cus_time) as yuefen,cus_status from min_customs
) as a group by yuefen,cus_status order by yuefen

如果不是你要的结果,你还是把结果贴出来,不然不知道你要的是什么。

#8


感觉楼主是想要2014年 对月份分组, 然后得出各个状态的的行数。

select 
 sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
     sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
     sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
     sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
     sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon,
      from min_customs where datepart(yy,cus_time)='2014'
group by datepart(mm,cus_time)

#9


恩!@alimake的理解是对的! sql2008如何从数据库获取1至12月的数据
但现在只是显示有数据的页面,我想显示的是所有月份的行,不管里面有没有数据!有个字段标志每一行是几月份!再次求指点~~~ sql2008如何从数据库获取1至12月的数据实现的我再会20分给大家的!谢谢

#10


   
   select 
 sum(case when cus_status='未确认'  then 1 else 0 end) as cus_none,
     sum(case when cus_status='确认'  then 1 else 0 end) as cus_confirm ,
     sum(case when cus_status='看房'  then 1 else 0 end) as cus_abandon,
     sum(case when cus_status='签约'  then 1 else 0 end) as cus_sign ,
     sum(case when cus_status='已放弃'  then 1 else 0 end) as cus_abandon,month(cus_time) as yue
      from min_customs where datepart(yy,cus_time)='2014'
group by datepart(mm,cus_time),month(cus_time) 
sql2008如何从数据库获取1至12月的数据
月份已经出来了!只差显示的是所有月份的行,不管里面有没有数据!! sql2008如何从数据库获取1至12月的数据帮帮忙,大家!!!

#11


 SELECT    a.number AS yue,
            b.cus_none ,
            b.cus_confirm ,
            b.cus_abandon ,
            b.cus_sign ,
            b.cus_abandon
  FROM      ( SELECT    number
              FROM      master..spt_values P
              WHERE     type = 'P'
                        AND number BETWEEN 1 AND 12
            ) a
            LEFT JOIN ( SELECT  SUM(CASE WHEN cus_status = '未确认' THEN 1
                                         ELSE 0
                                    END) AS cus_none ,
                                SUM(CASE WHEN cus_status = '确认' THEN 1
                                         ELSE 0
                                    END) AS cus_confirm ,
                                SUM(CASE WHEN cus_status = '看房' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                SUM(CASE WHEN cus_status = '签约' THEN 1
                                         ELSE 0
                                    END) AS cus_sign ,
                                SUM(CASE WHEN cus_status = '已放弃' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                MONTH(cus_time) AS yue
                        FROM    min_customs
                        WHERE   DATEPART(yy, cus_time) = '2014'
                        GROUP BY DATEPART(mm, cus_time) ,
                                MONTH(cus_time)
                      ) b ON a.number = b.yue


参考 

#12


@OrchidCat,非常感谢!已经出来了! sql2008如何从数据库获取1至12月的数据
但是nullif不管用,我想将字段为null改为数字0!!大家能帮我再看一下吗?谢谢!

#13


SELECT    a.number AS yue,
           isnull( b.cus_none ,0),
            isnull(b.cus_confirm ,0),
            isnull(b.cus_abandon ,0),
           isnull( b.cus_sign ,0),
           isnull( b.cus_abandon,0)
  FROM      ( SELECT    number
              FROM      master..spt_values P
              WHERE     type = 'P'
                        AND number BETWEEN 1 AND 12
            ) a
            LEFT JOIN ( SELECT  SUM(CASE WHEN cus_status = '未确认' THEN 1
                                         ELSE 0
                                    END) AS cus_none ,
                                SUM(CASE WHEN cus_status = '确认' THEN 1
                                         ELSE 0
                                    END) AS cus_confirm ,
                                SUM(CASE WHEN cus_status = '看房' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                SUM(CASE WHEN cus_status = '签约' THEN 1
                                         ELSE 0
                                    END) AS cus_sign ,
                                SUM(CASE WHEN cus_status = '已放弃' THEN 1
                                         ELSE 0
                                    END) AS cus_abandon ,
                                MONTH(cus_time) AS yue
                        FROM    min_customs
                        WHERE   DATEPART(yy, cus_time) = '2014'
                        GROUP BY DATEPART(mm, cus_time) ,
                                MONTH(cus_time)
                      ) b ON a.number = b.yue


试试

#14


ok!我怎么没想到!谢谢大家了! sql2008如何从数据库获取1至12月的数据

#15


共同学习啊  刚入行IT啊 就知道一点T-SQL 其他 复制 备份 啥的 完全不懂啊