首页 > 开发 > 综合 > 正文

SQL自动补充其他月份为0

2024-07-21 02:50:47
字体:
来源:转载
供稿:网友
SQL自动补充其他月份为0
create table PRoductSale(ID int identity(1,1) primary key,ProductName nchar(10), Sales int,Dates datetime)
insert into ProductSaleselect  'A',100,'2014-01-05'UNION ALLselect  'A',200,'2014-02-05'UNION ALLselect  'A',300,'2014-03-05'UNION ALLselect  'B',100,'2014-01-05'UNION ALLselect  'B',300,'2014-03-05'UNION ALLselect  'B',400,'2014-04-05'
select row_number() over (order by b.年) as ID , b.ProductName,ISNULL(c.Sales,0) Sales,b.Dates from (select rtrim(a.年)+'-'+rtrim(t.number)+'-'+rtrim('01') as Dates,a.ProductName,a.年,t.number 月 from (SELECT distinct YEAR(Dates) as 年,ProductName from ProductSale) a,master..spt_values t  where t.type='p' and t.number>=1 and t.number<=12) b left join ProductSale as c on b.年=YEAR(c.Dates) and b.月=MONTH(c.Dates) and b.ProductName=c.ProductName

运行SQL语句之前:

运行SQL语句之后:

知识点

1、获取日期的年份、月份(GetDate() = '2006-11-08 13:37:56.233')

MONTH( date )返回表示指定日期的“月”部分的整数。SELECT MONTH(GETDATE()) --返回11

YEAR( date )返回表示指定日期的“年”部分的整数。SELECT YEAR(GETDATE()) --返回2006

2、master..spt_value表的含义

相当于一个数字辅助表(master.dbo.spt_value),master是数据名,spt_value是表名,在sql中主要用到number字段。

3、sql创建表,自动增长字段IDENTITY

语法:IDENTITY(seed,increment)

参数:seed 加载到表中的第一个行所使用的值;

increment 与前一个加载的行的标识值想家的增量值。

create table ProductSale(ID int identity(1,1) primary key)

4、连接字段

如果字段都是CHAR型,直接用“+”连接;如果地段都是INT型,用CASE函数转换下,即case(字段名 as varchar(4) ),rtrim()函数,将字符串尾部的空格去掉。

5、sql语句实现断号问题(ROW_NUMBER函数)

row_number() over (order by b.年 ) as ID

参考资料:

http://bbs.csdn.net/topics/390656141

http://s.yanghao.org/program/viewdetail.php?i=347818


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表