帮我看看我的存储进程执行结果杂不对呢,比如参数我传递的是@sdate 2005-05-23 14:59:59 和@sdate 2005-05-22 14:59:59

dm1cyg 2006-05-23 10:04:02
CREATE PROCEDURE rjstj
@sdate datetime,
@edate datetime
/*
处理厂商统计的sdate代表开始日期edate
代表结束日期
@sdate datetime,
*/
as
--set @sDate=convert(datetime,convert(varchar(10),getdate(),120)+' 14:59:59.997')
--set @edate=dateadd(dd,-1,@eDate)
declare @s varchar(8000)

--set @sdate='2006-01-10'
--set @edate='2006-01-07'
set @s='select 类别= isnull(类别,''总计'')'
select @s=@s+',['+类型名称+']=sum(case 类型名称 when '''+类型名称+''' then 销售单价*数量 else 0 end)'
from yphjxshz group by 类型名称 order by 类型名称
set @s=@s
+',[合计]= sum(销售单价*数量) from yphjxshz where datediff(ms,'''+convert(char(20),@sdate,120)+''',发生日期)<=0 and datediff(ms,'''+convert(char(20),@edate,120)+''',发生日期)>= 0 group by 类别 with rollup order by 合计'
exec(@s)
GO
执行完后和我用sum()统计出的合计差,不知道为什么
...全文
241 19 打赏 收藏 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dm1cyg 2006-05-24
  • 打赏
  • 举报
回复
为什么和我用 select sum(销售单价*数量) as 金额,类别 from yphjxshz where 发生日期 between 2005-05-22 14:59:59 and 2005-05-23 14:59:59 group by 类别 求出来的,比他多了
dm1cyg 2006-05-24
  • 打赏
  • 举报
回复
少量的数据是正确的,多了就不对了,
昵称被占用了 2006-05-24
  • 打赏
  • 举报
回复
晕

简直是鸵鸟
dm1cyg 2006-05-24
  • 打赏
  • 举报
回复
楼上大哥,帮我看看我后发点段的.我想把他改成下午15:00为每天的分界线
dm1cyg 2006-05-24
  • 打赏
  • 举报
回复
不改也一致
昵称被占用了 2006-05-24
  • 打赏
  • 举报
回复
晕

改成between当然一致了

dm1cyg 2006-05-24
  • 打赏
  • 举报
回复
一致的,是数据有问题,

没用错误是数据有问题了,
帮看看下面的存储过程,我是想统计一个月的医生工作量,但有个要求是这样的,每天的都是昨天3点到今天3点算一个工作日,每月的20号,为结帐日期 ,21号为下个月的,帮我看看我这段那里出问题了
--创建存储过程
/*
write by cyg
date 2006-01-23
统计月医生工作量

*/
CREATE procedure sp_getInfo(@month datetime,@time as int=0) --@time,统计时间中小时的限定值
as
begin
--输入参数合法性判定
if @time<0 or @time>23
return

declare @s varchar(8000),@day int
set @s='select 医生名称'

--提取被统计时间范围内的数据,并插入临时表#t 21 00:00:00为21号00点00分00秒而 20 23:59:59为下月20号的开始
select * into #t from yphjxshz where dateadd(hh,24-@time,发生日期) between convert(char(8),dateadd(mm,-1,@month),120)+'21 00:00:00' and convert(char(8),@month,120)+'20 23:59:59'

--定义游标,获取当前统计范围内不重复的日期数据信息
declare t_cursor cursor for select distinct day(发生日期) from yphjxshz order by day(发生日期)

--打开游标
open t_cursor
fetch next from t_cursor into @day

--遍历游标,利用动态SQL实现交叉表查询
while @@fetch_status=0
begin
select @s=@s+',['+rtrim(@day)+'号'+类别+']=cast(sum(case when day(发生日期)='+rtrim(@day)+' and 类别='''+类别+''' then 数量*销售单价 else 0 end) as int)'
from (select distinct 类别 from yphjxshz) a
set @s=@s+',['+rtrim(@day)+'号合计]=cast(sum(case when day(发生日期)='+rtrim(@day)+' then 数量*销售单价 else 0 end) as int)'
fetch next from t_cursor into @day
end

--关闭游标
close t_cursor
deallocate t_cursor

--完成动态SQL语句的组织
set @s=@s+' from #t group by 医生名称'

--输出动态SQL语句的内容
print @s

--执行动态SQL
exec(@s)
end
GO
昵称被占用了 2006-05-24
  • 打赏
  • 举报
回复
怎么会一致?
查询的时间范围根本就不同
  • 打赏
  • 举报
回复
不应该不一致,你把表结构和数据贴出来,看看。
昵称被占用了 2006-05-24
  • 打赏
  • 举报
回复
直接写between多好,省得麻烦

set @s=@s
+',[合计]= sum(销售单价*数量) from yphjxshz where 发生日期 between '''+convert(char(20),@sdate,120)+''' and '''+convert(char(20),@edate,120)+''' group by 类别 with rollup order by 合计'

或者

set @s=@s
+',[合计]= sum(销售单价*数量) from yphjxshz where 发生日期>='''+convert(char(20),@sdate,120)+''' and 发生日期<='''+convert(char(20),@edate,120)+''' group by 类别 with rollup order by 合计'

用datediff效率低而且容易让自己糊涂
昵称被占用了 2006-05-24
  • 打赏
  • 举报
回复
时间处理问题


set @s=@s
+',[合计]= sum(销售单价*数量) from yphjxshz where datediff(ms,'''+convert(char(20),@sdate,120)+''',发生日期)<=0 and datediff(ms,'''+convert(char(20),@edate,120)+''',发生日期)>= 0 group by 类别 with rollup order by 合计'

其中
datediff(ms,'''+convert(char(20),@sdate,120)+''',发生日期)<=0
的结果就是 @sdate>=发生日期
datediff(ms,'''+convert(char(20),@edate,120)+''',发生日期)>= 0
的结果就是 @edate<=发生日期

整个语句取的时间范围是 not (发生日期 between 2005-05-22 14:59:59 and 2005-05-23 14:59:59)


wwh999 2006-05-24
  • 打赏
  • 举报
回复
需要数据..你贴出来..才好帮你论证..
liangpei2008 2006-05-23
  • 打赏
  • 举报
回复
给我yphjxshz的结构与数据,我试一下
dm1cyg 2006-05-23
  • 打赏
  • 举报
回复
执行完的结果和我发的一样,不对
wwh999 2006-05-23
  • 打赏
  • 举报
回复
老大都已经写了,关注 :)
dm1cyg 2006-05-23
  • 打赏
  • 举报
回复
zjcxc(邹建)
你给我发的杂执行呀
dm1cyg 2006-05-23
  • 打赏
  • 举报
回复
他求出的合计比我用
sum()求出的合计少呀
wwh999 2006-05-23
  • 打赏
  • 举报
回复
出现什么故障或错误提示?
zjcxc 元老 2006-05-23
  • 打赏
  • 举报
回复
CREATE PROCEDURE rjstj
@sdate datetime,
@edate datetime
/*
处理厂商统计的sdate代表开始日期edate
代表结束日期
@sdate datetime,
*/
as
--set @sDate=convert(datetime,convert(varchar(10),getdate(),120)+' 14:59:59.997')
--set @edate=dateadd(dd,-1,@eDate)
declare @s nvarchar(4000)

--set @sdate='2006-01-10'
--set @edate='2006-01-07'
set @s='select 类别= isnull(类别,''总计'')'
select @s=@s+',['+类型名称+']=sum(case 类型名称 when '''+类型名称+''' then 销售单价*数量 else 0 end)'
from yphjxshz group by 类型名称 order by 类型名称
set @s=@s
+',[合计]= sum(销售单价*数量) from yphjxshz where datediff(ms,@sdate,发生日期)<=0 and datediff(ms,@edate,发生日期)>= 0 group by 类别 with rollup order by 合计'
exec sp_executesql @s, N' @sdate datetime,@edate datetime', @sdate, @edate

GO
内容概要:本文聚焦于电力电子化电力系统中变换器端口导纳的黑盒提取与振荡模式辨识,结合Matlab与PSCAD仿真平台开展建模、仿真与分析。通过黑盒建模方法提取变换器在不同工况下的端口导纳特性,利用频域扫描与系统辨识技术获得其小信号阻抗模型,并基于广义奈奎斯特判据等频域稳定性分析工具对系统的潜在振荡模式进行精确辨识与评估。研究涵盖了小信号建模、阻抗测量、频域稳定性判据应用等关键技术,旨在解决高比例电力电子设备接入引起的次同步振荡、宽频振荡等稳定性难题,提升复杂电力系统的安全稳定运行能力。; 适合人群:具备电力系统分析、电力电子技术及自动控制理论基础的研究生、科研人员,以及从事新能源并网、微电网、柔性输电系统等领域的工程技术人员。; 使用场景及目标:① 掌握电力电子变换器的黑盒导纳建模方法,理解其在多变换器交互系统中的等效动态行为;② 学习并应用阻抗分析法进行系统级频域稳定性评估,深入理解振荡机理与失稳诱因;③ 熟练运用Matlab与PSCAD联合仿真平台,完成从建模、小信号扰动仿真、数据采集到频域分析的全流程研究,服务于新型电力系统稳定性分析与控制器设计优化。; 阅读建议:建议读者在掌握电力系统小信号稳定性理论的基础上,结合文中提供的Matlab与PSCAD仿真案例进行实践操作,重点关注阻抗提取的仿真设置、频率扫描策略、数据处理方法以及Nyquist判据在多输入多输出系统中的应用细节,以深入理解系统振荡的成因、传播路径及抑制策略。
内容概要:本文围绕基于混沌系统与DNA编码的彩色数字图像加密解密体系展开研究,提出了一种多层级、高复杂度的复合加密方案。通过结合混沌系统的伪随机遍历特性与DNA编码的海量组合优势,实现了对彩色图像RGB三通道的像素混淆与扩散,有效提升了加密算法的密钥空间与抗破解能力。研究重点包括加密解密流程设计、密钥敏感性分析,并系统性开展了抗噪声与抗裁剪性能测试。实验结果表明,该算法在面对高斯噪声、椒盐噪声及不同程度的图像裁剪攻击时,仍能较好地恢复图像主体结构与核心信息,展现出优异的鲁棒性与实用性。; 适合人群:具备一定图像处理或信息安全基础知识的科研人员、研究生及从事多媒体安全技术开发的工程技术人员。; 使用场景及目标:①用于保障彩色图像在开放网络环境中的安全传输与存储;②应对图像在传输过程中遭受的噪声干扰与恶意裁剪攻击;③为高鲁棒性图像加密算法的设计与评估提供理论依据和技术参考。; 阅读建议:建议读者结合Matlab代码实现,深入理解混沌序列生成、DNA编码映射及像素置乱扩散的具体过程,并通过复现实验验证算法在不同干扰场景下的性能表现。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧