高分求解sql,也可以使用proc或view只要能解决就行!有点难度,请高手指点!

showmetoyou 2004-12-23 05:24:22
生成数据表(moblieuser)的脚本如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[moblieuser]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[moblieuser]
GO

CREATE TABLE [dbo].[moblieuser] (
[id] [float] NULL ,
[moblie] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[password] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[ordercode] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[paytime] [smalldatetime] NULL ,
[status] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[result] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
数据如下:(精简)
id moblie password ordercode paytime status result
1990.0 13500057554 699704 MOVIE 20041124 NULL 000000
1993.0 13500057554 699704 MOVIE 20041124 1 null
1995.0 13500057554 699704 MOVIE 20041124 1 000000
2051.0 13500337201 741611 MUSIC 20041124 NULL null
2067.0 13500337201 741611 MUSIC 20041124 NULL 000000
2030.0 13500337201 741611 MUSIC 20041124 1 000000
5735.0 13500337201 191406 MUSIC 20041205 NULL 000000
7268.0 13455760459 754181 MOVIE 20041210 NULL 000000
7284.0 13455760459 NULL MOVIE 20041210 1 null
7284.0 13455760459 NULL MUSIC 20041210 1 000000


条件:ordercode字段表示栏目代码, MOVIE为电影频道,订阅收费10元,music为音乐频道,订阅收费5元
status字段为状态标志,只有两个状态,null表示订阅,1表示退订
result字段为处理标志,只有两个状态,000000表示处理成功,null表示处理失败
举例:用户13500057554在20041124日订阅(status为null(is not 1))MOVIE成功(result为000000),20041200对应的收入加10元,
如果不成功,不加钱,如果用户退订MOVICE并且成功,收入减10元,退订不成功,收入不减!
目标:统计生成moblieuser表中三天时间内每天收入表(income)
paytime money
20041124 0 注释0=(10-0-10+0+5-5)
20041205 5
20041210 5 注释5=(10-0-5)

请各位大虾看看测试,测试,贴出解决方案!分数不够还可以加!
如果有不清楚的地方,直接加我msn:showmeself@hotmail.com或QQ:39197106!也欢迎加我交流!









...全文
182 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
showmetoyou 2004-12-24
  • 打赏
  • 举报
回复
欢迎交流!
showmetoyou 2004-12-23
  • 打赏
  • 举报
回复
select datename(yy,paytime)+right(('0'+datename(mm,paytime)),2)+right(('0'+datename(dd,paytime)),2) as 日期,
count(distinct moblie) as 用户数目,
sum((case ordercode when 'MSNR001' then 12 when '10057001' then 15 when 'LWZ' then 5 end)
* (case when status is null then 1 else -1 end)
* (case when result is null then 0 else 1 end)) as 总金额
from moblieuser
group by datename(yy,paytime)+right(('0'+datename(mm,paytime)),2)+right(('0'+datename(dd,paytime)),2)
order by datename(yy,paytime)+right(('0'+datename(mm,paytime)),2)+right(('0'+datename(dd,paytime)),2) DESC

这就是我项目中的初步sql,已成功!我明天再研究一下!中午揭帖!
showmetoyou 2004-12-23
  • 打赏
  • 举报
回复
谢谢!各位大虾!我测试一下!明天中午揭帖!等着加分吧!
vinsonshen 2004-12-23
  • 打赏
  • 举报
回复
这样试试吧:

select convert(varchar(10),paytime,120) as paytime,
income=sum(case when ordercode='MOVIE' and status is null and result='000000' then 10
when ordercode='MUSIC' and status is null and result='000000' then 5
when ordercode='MOVIE' and status =1 and result='000000' then -10
when ordercode='MUSIC' and status =1 and result='000000' then -5
else 0 end
)
from moblieuser
group by convert(varchar(10),paytime,120)
playyuer 2004-12-23
  • 打赏
  • 举报
回复
select paytime,
(select sum(b.val) from moblieuser where status is null and result = '0' and paytime = a.paytime)
-
(select sum(b.val) from moblieuser where status = '1' and result = '0' and paytime = a.paytime)

from moblieuser a
,(select 'MOVIE' as ordercode,10 as val
union all
select 'MUSIC',5) b
where a.ordercode = b.ordercode
group by paytime
order by paytime
子陌红尘 2004-12-23
  • 打赏
  • 举报
回复
select
paytime,
sum((case ordercode when 'MOVIE' then 10 when 'MUSIC' then 5 end) * (case when status is null then 1 else -1 end) * (case when result is null then 0 else 1 end)) as money
from
moblieuser
group by
paytime
order by
paytime
lsxaa 2004-12-23
  • 打赏
  • 举报
回复
select a.paytime,
sum(case when a.result is null then 0
else (case when a.status is null then b.val
when a.status=1 then -b.val
end
)
end) as money
from t a,(select 'MOVIE' as ordercode,10 as val union all
select 'MUSIC' as ordercode,5 as val ) b --改一点
where a.ordercode=b.ordercode
group by a.paytime
order by a.paytime
lsxaa 2004-12-23
  • 打赏
  • 举报
回复
我没测试,你自己测试吧
lsxaa 2004-12-23
  • 打赏
  • 举报
回复
select a.paytime,
sum(case when a.result is null then 0
else (case when a.status is null then b.val
when a.status=1 then -b.val
end
)
end) as money
from t a,(select 'MOVIE' as ordercode,10 as val union all
'MUSIC' as ordercode,5 as val ) b
where a.ordercode=b.ordercode
group by a.paytime
order by a.paytime
内容概要:本文围绕“数据驱动下光伏建筑群源荷不确定性解析及其储能多目标低碳经济调度研究”展开,提出了一种融合数据驱动方法与多目标优化算法的综合调度框架。研究首先基于历史数据对光伏发电出力与建筑负荷的不确定性进行建模,采用概率预测与场景生成技术刻画源荷波动特性,并通过典型场景提取降低输入复杂性。在此基础上,构建了以最小化系统运行成本、降低碳排放强度、提升可再生能源消纳率为目标的多目标优化模型,引入NSGA-II等先进智能优化算法求解Pareto最优前沿,实现经济性与低碳性的协同优化。通过Python编程完成模型搭建与仿真验证,结果表明该方法能有效应对源荷双重不确定性,在保障供电可靠性的前提下,实现了储能系统的优化配置与多目标调度决策的均衡协调; 适合人群:具备一定电力系统基础知识和Python编程能力,从事能源系统优化、智能调度、低碳技术等相关领域的研究生、科研人员及工程技术人员; 使用场景及目标:①应用于光伏建筑群、工业园区微电网等分布式能源系统的运行调度;②支撑含储能系统的多目标低碳经济调度决策,兼顾能源成本节约与碳排放控制双重目标;③为相关课题的研究与工程实践提供完整的算法实现参考与可复现的仿真案例支持; 阅读建议:建议读者结合文中提供的Python代码深入理解模型构建与求解流程,重点关注不确定性建模与多目标优化的耦合机制,可在实际数据基础上复现并改进算法,进一步探索不同权重策略下的调度方案优选方法。
代码下载链接: https://pan.quark.cn/s/cd4149768c91 互联网灰度部署系统解决方案的核心内容深度阐释: 一、灰度发布概念 灰度发布(亦称金丝雀发布)是在云计算及互联网服务领域中常见的一种发布策略,其中心理念是在全面推广新版本前,先向部分用户群体开放试用,以此来降低更新过程中的潜在风险。这种发布模式能够有效地兼顾用户体验与系统稳定性,它允许企业逐步将新的代码或功能部署至生产环境,并且仅对部分用户群体可见。此种做法有助于提前识别潜在问题,对用户体验造成的影响较小,并且能够获取更为真实的用户反馈信息。 二、系统现状和建设背景 在传统的发布模式中,每次更新都需要暂停服务才能发布新版本,这在用户体验和服务连续性方面存在明显不足。伴随互联网经济的繁荣发展,移动终端与日常生活的融合日益紧密,对互联网系统的支撑需求持续增长。特别是在电信行业,系统需要实现7*24小时不间断服务,以适应快速变化的市场需求和频繁更新的技术。因此,迫切需要一种新的发布方式,即灰度发布,用以提升产品发布的效率并改善用户体验。 三、灰度发布的优势与挑战 灰度发布相较于传统全量发布的优势包括: 1. 提供了新功能的试错空间,支持边发布边进行优化。 2. 维持服务的连续性,实现无缝升级。 3. 针对不同用户群体实施功能区分,提升用户体验和满意度。 4. 收集用户反馈,为后续版本的功能迭代和优化提供指导。 然而,灰度发布同样面临挑战,例如技术实现的复杂性、增加的运维压力等。 四、灰度发布的具体实施策略 1. 建设目标:保证湖北联通对外服务的互联网程序能够实现7*24小时不中断的灰度发布,实现无缝升级,同时全面提升用户体验。 2. 总体说明:需要通过灰度发布实现迭代开发和版本快速更...

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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