高手帮忙,搞了一天了,交叉表,分不够在送.急....急....急..

zhoulanga 2007-08-09 04:32:20
展厅名称 周末开始 周末结束 商家 开始时间 结束时间 平日价 周末价
展厅一 6 7 张三 2007-4-29 2007-10-13 518 498
展厅一 6 7 张三 2007-10-14 2007-10-28 633 633

说明:输入商家,开始时间和结束时间.生成交叉表,而且判断周末的价.如果周末开始开始为0和周末和平日价相同则不分周未和平日价..就要就是判断周末平时了...
输出:
如果输入商家,张三,2007-10-12到2007-10-14
生成表.
商家 2007-10-12 2007-10-13 2007-10-14
张三 518 498 633

说明:
2007-10-12为星期5没有在周末开始和周末结束里价格为平日518
2007-10-13 为星期6在周未开始里价格应为周末价498
2007-10-14 平日价和周末价相等可忽略周末开始和周末结束
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengmou 2007-08-09
  • 打赏
  • 举报
回复
--这段改为
select f.date,t.商家,case when datepart(dw,f.date) between t.周末开始 and t.周末结束 then t.周末价 else t.平日价 end as 价格
into #tmp
from #tb t
join f_getdate('2007-10-12','2007-10-14',null) f on f.date between t.开始时间 and t.结束时间
where t.商家 = '张三'
zhoulanga 2007-08-09
  • 打赏
  • 举报
回复
谢谢.搞定了.
zhoulanga 2007-08-09
  • 打赏
  • 举报
回复
TO:
mengmou()mengmou()

select f.date,t.商家,case when f.weekday = '星期六' and t.周末开始 = 6 or f.weekday = '星期日'and t.周末结束 = 7 then t.周末价 else t.平日价 end as 价格
into #tmp
from #tb t
join f_getdate('2007-10-12','2007-10-14',null) f on f.date between t.开始时间 and t.结束时间
where t.商家 = '张三'

周末开始 周末结束 不会定义死在周六或是周日.可能也会是4,6不规则的
mengmou 2007-08-09
  • 打赏
  • 举报
回复
--建立测试环境
create table #tb(展厅名称 varchar(10),周末开始 int,周末结束 int,商家 varchar(10),开始时间 datetime,结束时间 datetime,平日价 int,周末价 int)
insert #tb(展厅名称,周末开始,周末结束,商家,开始时间,结束时间,平日价,周末价)
select '展厅一','6','7','张三','2007-4-29','2007-10-13','518','498' union all
select '展厅一','6','7','张三','2007-10-14','2007-10-28','633','633'
go
--执行测试语句

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdate]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getdate]
GO

/*--生成列表

生成指定日期段的日期列表

--邹建 2005.03(引用请保留此信息)--*/

/*--调用示例

--查询工作日
SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',0)

--查询休息日
SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',1)

--查询全部日期
SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',NULL)
--*/

CREATE FUNCTION dbo.f_getdate(
@begin_date Datetime, --要查询的开始日期
@end_date Datetime, --要查询的结束日期
@bz bit --@bz=0 查询工作日,@bz=1 查询休息日,@bz IS NULL 查询全部日期
)RETURNS @re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3))
AS
BEGIN
DECLARE @tb TABLE(ID int IDENTITY(0,1),a bit)
INSERT INTO @tb(a) SELECT TOP 366 0
FROM sysobjects a ,sysobjects b

IF @bz=0
WHILE @begin_date<=@end_date
BEGIN
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM(
SELECT Date=DATEADD(Day,ID,@begin_date)
FROM @tb
)a WHERE Date<=@end_date
AND (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 BETWEEN 1 AND 5
SET @begin_date=DATEADD(Day,366,@begin_date)
END
ELSE IF @bz=1
WHILE @begin_date<=@end_date
BEGIN
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM(
SELECT Date=DATEADD(Day,ID,@begin_date)
FROM @tb
)a WHERE Date<=@end_date
AND (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 in(0,6)
SET @begin_date=DATEADD(Day,366,@begin_date)
END
ELSE
WHILE @begin_date<=@end_date
BEGIN
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM(
SELECT Date=DATEADD(Day,ID,@begin_date)
FROM @tb
)a WHERE Date<=@end_date
SET @begin_date=DATEADD(Day,366,@begin_date)
END

RETURN
END
GO

select f.date,t.商家,case when f.weekday = '星期六' and t.周末开始 = 6 or f.weekday = '星期日'and t.周末结束 = 7 then t.周末价 else t.平日价 end as 价格
into #tmp
from #tb t
join f_getdate('2007-10-12','2007-10-14',null) f on f.date between t.开始时间 and t.结束时间
where t.商家 = '张三'

declare @sql varchar(8000) set @sql = 'select 商家'

select @sql = @sql+ ',max(case when date = '''+ convert(varchar(10),date,120)+ ''' then 价格 else 0 end) as ['+ convert(varchar(10),date,120) + ']'
from #tmp

select @sql = @sql + ' from #tmp group by 商家'
exec(@sql)

go
--删除测试环境
drop table #tb,#tmp
go
/*--测试结果

商家 2007-10-12 2007-10-13 2007-10-14
---------- ----------- ----------- -----------
张三 518 498 633

*/
zhoulanga 2007-08-09
  • 打赏
  • 举报
回复
展厅名称 周末开始 周末结束 商家 开始时间 结束时间 平日价 周末价
展厅一 6 7 张三 2007-4-29 2007-10-13 518 498
展厅一 6 7 张三 2007-10-14 2007-10-28 633 633

上面的乱了..
自己先顶
内容概要:本文针对当前车辆诊断系统中存在的诊断需求不统一、DID&DTC配混乱、刷新流程不规范、沟通效率低及数据散等问题,提出通过制定统一的诊断刷新规范并构建诊断需求管理平台的解决方案。方案旨在建立标准化的诊断框架与需求模板,开发集需求管理、数据配、流程监控于一体的统一平台,并推行规范化诊断刷新流程,从而实现需求变更减少80%、设计冲突排查时间降低90%、沟通协调时间减少50%等目标,最终提升研发效率、降低研发与售后成本、缩短产品上市周期。; 适合人群:汽车电子系统工程师、诊断开发人员、ECU供应商技术人员、项目管理人员及企业战略决策者;适用于从事车辆诊断系统设计、开发、测试及相关管理工作的专业人员。; 使用场景及目标:①用于指导企业建立统一的车辆诊断规范体系与数字化管理平台;②解决多供应商环境下诊断数据冲突与集成难题;③优化诊断刷新流程以提升安全性与效率;④降低整车研发成本并加速产品上市进程; 阅读建议:此文档兼具技术方案与商业价值析,建议结合实施计划与预算章节进行全流程理解,重点关注规范制定、平台功能设计与跨团队协同机制,在实际项目中阶段推进试点与落地。
【论文复现】一种基于价格弹性矩阵的居民峰谷时电价激励策略【需求响应】(Matlab代码实现)内容概要:本文介绍了一种基于价格弹性矩阵的居民峰谷时电价激励策略,旨在通过需求响应机制优化电力系统负荷布,提升电网运行效率。该研究利用Matlab进行仿真与代码实现,构建价格弹性模型,析居民用户在不同电价时段下的用电行为响应,进而制定合理的峰谷电价方案,引导用户错峰用电,缓解高峰负荷压力。文中详细阐述了模型构建过程、算法实现逻辑及仿真结果析,验证了该策略在促进负荷均衡和提升电力系统经济性方面的有效性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校学生、科研人员及从事需求响应、能源管理等相关领域的工程技术人员。; 使用场景及目标:①研究居民用电行为与电价之间的响应关系;②设计并仿真基于价格弹性的时电价激励策略;③实现需求响应在电力系统优化调度中的具体应用;④为电力部门制定科学合理的电价政策提供技术支持与决策参考。; 阅读建议:建议读者结合Matlab代码逐段理解模型实现细节,重点关注价格弹性矩阵的构建方法与需求响应模型的仿真流程,同时可参照文中案例进行复现实验,加深对理论与算法应用的理解。
【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)内容概要:本文围绕“基于改进秃鹰算法的微电网群经济优化调度研究”展开,重点介绍了利用改进秃鹰算法(Bald Eagle Search Algorithm, BES)对微电网群进行经济优化调度的Matlab代码实现方法。该研究旨在解决微电网系统中多能源协调、运行成本最小化与供电可靠性之间的平衡问题,通过引入算法改进策略提升寻优能力与收敛速度,有效应对微电网中可再生能源出力波动性和负荷不确定性带来的调度挑战。文中详细阐述了微电网群的系统架构、目标函数构建、约束条件设定以及改进算法的应用流程,并通过仿真实验验证了其在降低运行成本、提高能源利用效率方面的优越性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事微电网、智能电网优化调度相关工作的工程技术人员,尤其适合正在开展能源优化、智能算法应用研究的研究者。; 使用场景及目标:①用于微电网群多目标经济调度模型的构建与求解;②作为智能优化算法(如秃鹰算法)改进与应用的学习案例;③支撑科研论文复现、算法对比实验及实际项目中的能源管理系统开发。; 阅读建议:建议结合提供的Matlab代码进行同步调试与仿真,重点关注目标函数设计、约束处理方式与算法改进机制,同时可将其与其他智能算法(如粒子群、遗传算法)进行对比析,深化对优化调度问题求解路径的理解。

27,580

社区成员

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

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