mssql 游标动态日期列
来源:互联网 发布:haoservice数据平台 编辑:程序博客网 时间:2024/06/15 15:06
需求:
已知表#TEMP2:
材料名称 日期 数量
A1 2014-09-01 100
A1 2014-09-02 200
A2 2014-09-01 100
A2 2014-09-02 300
A3 2014-09-01 400
A3 2014-09-02 500
输入:开始日期(2014-09-01) 结束日期(2014-09-25)
结果显示如下:
材料名称,2014-09-01,2014-09-02,2014-09-03,2014-09-04,........................2014-09-25
A1 , 100 , 200 , 600 , 700 .......................900
A2 , 200 , 400 , 600 , 700 .......................900
A3 , 400 , 200 , 600 , 700 .......................900
注:以上数据不准确,只是举例说明
第一步动态创建表:
--判断表是否存在,存在则删除
IF EXISTS(SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'Ds_IcmoplanT')
AND type IN ( N'U' ) )
BEGIN
DROP TABLE Ds_IcmoplanT
END
--定义
DECLARE
@Fstr NVARCHAR(1000),--组合字符串
@Sql NVARCHAR(1000),--结果
@FSDateS DATE,--开始日期
@FEDateS DATE --结束日期
--赋值
SET @FSDateS=@FSDate
SET @FEDateS=@FEDate
--循环得出组合字符串
WHILE @FSDateS<=@FEDateS
BEGIN
SET @Fstr= ISNULL(@Fstr,'')+''' '''+' as '''+CONVERT(VARCHAR(100),@FSDateS, 23)+''''+','
SET @FSDateS=DATEADD(DAY, 1, @FSDateS)
END
--去掉最后一个符号
SET @Fstr=SUBSTRING(@Fstr,1,LEN(@Fstr)-1)
SET @Sql='SELECT distinct 材料名称,'+@Fstr+' into Ds_IcmoplanT FROM #TEMP2'
EXECUTE(@Sql)
--结果如下
--select * from Ds_Icmoplan
第二步动态对列赋值:
--定义
DECLARE
@SSql NVARCHAR(1000),--结果
@FSDateE DATE, --开始日期
@FEDateE DATE, --结束日期
@FDate VARCHAR(100), --赋值用
@FValue VARCHAR(100), --数量
@FCLnumber VARCHAR(255) --游标标量
DECLARE X001 CURSOR FOR
SELECT 材料名称 FROM Ds_Icmoplan
OPEN X001
FETCH NEXT FROM X001 INTO @FCLnumber
WHILE @@FETCH_STATUS = 0
BEGIN
/* cursor logic */
SET @FValue=''
SET @FSDateE=@FStartTime
SET @FEDateE=@FEndTime
SET @SSql=''
--循环查询赋值
WHILE @FSDateE<=@FEDateE
BEGIN
SELECT @FValue=数量 FROM #TEMP2 WHERE FDateTime=@FSDateE AND 材料名称=@FCLnumber
SET @FDate='['+CONVERT(VARCHAR(100),@FSDateE, 23)+']'
SET @SSql='UPDATE Ds_Icmoplan SET '+@FDate+'='+''''+@FValue+''''+' WHERE 材料名称='+''''+@FCLnumber+''''
EXECUTE(@SSql)
SET @FValue=''
SET @FSDateE=DATEADD(DAY, 1, @FSDateE)
END
FETCH NEXT FROM X001 INTO @FCLnumber
END
CLOSE X001
DEALLOCATE X001
--结果如下
select * from Ds_Icmoplan
- mssql 游标动态日期列
- MSSQL日期列默认为短日期
- [MSSQL]双重游标的使用以及动态游标的使用
- MSSQL 游标
- MSSQL游标
- mssql 游标
- MSSQL游标
- mssql游标
- MSSQL游标
- MSSQL 动态列转行并统计
- SQL动态日期列统计
- [MSSQL]游标的使用
- MSSQL游标使用 心得
- MSSQL 游标使用
- MSSQL游标的使用
- MSSQL游标的使用
- MSSQL游标使用
- MSSQL数据库游标
- 瓦片地图原理
- 微机原理第二次试验-将四位十六进制数转化为16位二进制数
- Chrome设置--disable-web-security解决跨域问题
- 微信公众号获取用户基本信息
- 欢迎使用CSDN-markdown编辑器
- mssql 游标动态日期列
- 【脑洞】人工智能是否能主宰未来战争!
- UEFI模式下,在win10的基础上安装ubuntu双系统教程
- JavaWeb学习
- 从Excel中读取内容到java
- MJExtension使用指导
- mySql 中Access denied for user 'root'@'localhost' (using password:YES),Could not get JDBC Connection
- springmvc-upload文件上传
- java stream api