求解一复杂问题

Luckyji 2007-03-29 10:50:42
已经有数据库表,存放内容示例
id(编号) compName addDate addValue
1 cmp1 1 100
2 cmp1 2 332
3 cmp2 1 546
4 cmp4 3 450
5 cmp3 3 1000

....


现求一视图,结果为
编号 公司名称 一月份 二月份 三月份 ... 十二月 总计
1 cmp1 100 332
2 cmp2 无记录 2



.......
...全文
260 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2007-03-29
  • 打赏
  • 举报
回复
多回復還是有好處。 :
dawugui 2007-03-29
  • 打赏
  • 举报
回复
--也不麻烦,插入临时表

select 编号 = identity(int,1,1),* into test from
(
select 公司名称,
sum(case when adddate = 1 then addvalue else 0 end) as '一月份',
sum(case when adddate = 2 then addvalue else 0 end) as '二月份',
sum(case when adddate = 3 then addvalue else 0 end) as '三月份',
sum(case when adddate = 4 then addvalue else 0 end) as '四月份',
sum(case when adddate = 5 then addvalue else 0 end) as '五月份',
sum(case when adddate = 6 then addvalue else 0 end) as '六月份',
sum(case when adddate = 7 then addvalue else 0 end) as '七月份',
sum(case when adddate = 8 then addvalue else 0 end) as '八月份',
sum(case when adddate = 9 then addvalue else 0 end) as '九月份',
sum(case when adddate = 10 then addvalue else 0 end) as '十月份',
sum(case when adddate = 11 then addvalue else 0 end) as '十一月份',
sum(case when adddate = 12 then addvalue else 0 end) as '十二月份',
sum(addvalue) as 总计
from tb
group by 公司名称
) t

select * from test
paoluo 2007-03-29
  • 打赏
  • 举报
回复
實現這個效果是不麻煩,但是就是要借用下臨時表,另外,樓主要的是“一视图”。

第一列可以沒有必要加上,直接用上面的語句實現吧。
Luckyji 2007-03-29
  • 打赏
  • 举报
回复
多谢各位老鸟,俺试一下,尽快给分
dawugui 2007-03-29
  • 打赏
  • 举报
回复
--也不麻烦,插入临时表

select id = identity(int,1,1),* into test from
(
select 公司名称,
sum(case when adddate = 1 then addvalue else 0 end) as '一月份',
sum(case when adddate = 2 then addvalue else 0 end) as '二月份',
sum(case when adddate = 3 then addvalue else 0 end) as '三月份',
sum(case when adddate = 4 then addvalue else 0 end) as '四月份',
sum(case when adddate = 5 then addvalue else 0 end) as '五月份',
sum(case when adddate = 6 then addvalue else 0 end) as '六月份',
sum(case when adddate = 7 then addvalue else 0 end) as '七月份',
sum(case when adddate = 8 then addvalue else 0 end) as '八月份',
sum(case when adddate = 9 then addvalue else 0 end) as '九月份',
sum(case when adddate = 10 then addvalue else 0 end) as '十月份',
sum(case when adddate = 11 then addvalue else 0 end) as '十一月份',
sum(case when adddate = 12 then addvalue else 0 end) as '十二月份'
from tb
group by 公司名称
) t

select * from test
paoluo 2007-03-29
  • 打赏
  • 举报
回复
如果不需要第一列,就可以像上面那麼寫。

如果需要第一列就麻煩些了。
dawugui 2007-03-29
  • 打赏
  • 举报
回复
行列转换加合计

例如有表A某些人每月消费数据如下:
id data month
001 11 1
001 12 2
001 13 3
001 14 4
001 15 5
001 16 6
001 17 7
001 18 8
001 19 9
001 110 10
001 111 11
001 112 12
002 21 1
002 22 2
002 23 3
002 24 4
002 25 5
002 26 6
002 27 7
002 28 8
002 29 9
002 210 10
002 211 11
002 212 12
要实现如下结果:
人员 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
001 11 12 13 14 15 16 17 18 19 110 111 112
002 21 22 23 24 25 26 27 28 29 210 211 212

create table 表A
(
id char(3),
data int,
month int
)
insert into 表A(id,data,month) values('001',11,1)
insert into 表A(id,data,month) values('001',12,2)
insert into 表A(id,data,month) values('001',13,3)
insert into 表A(id,data,month) values('001',14,4)
insert into 表A(id,data,month) values('001',15,5)
insert into 表A(id,data,month) values('001',16,6)
insert into 表A(id,data,month) values('001',17,7)
insert into 表A(id,data,month) values('001',18,8)
insert into 表A(id,data,month) values('001',19,9)
insert into 表A(id,data,month) values('001',110,10)
insert into 表A(id,data,month) values('001',111,11)
insert into 表A(id,data,month) values('001',112,12)
insert into 表A(id,data,month) values('002',21,1)
insert into 表A(id,data,month) values('002',22,2)
insert into 表A(id,data,month) values('002',23,3)
insert into 表A(id,data,month) values('002',24,4)
insert into 表A(id,data,month) values('002',25,5)
insert into 表A(id,data,month) values('002',26,6)
insert into 表A(id,data,month) values('002',27,7)
insert into 表A(id,data,month) values('002',28,8)
insert into 表A(id,data,month) values('002',29,9)
insert into 表A(id,data,month) values('002',210,10)
insert into 表A(id,data,month) values('002',211,11)
insert into 表A(id,data,month) values('002',212,12)
go

SELECT id as '人员' ,
SUM(CASE month WHEN 1 THEN data ELSE 0 END) AS '1月' ,
SUM(CASE month WHEN 2 THEN data ELSE 0 END) AS '2月' ,
SUM(CASE month WHEN 3 THEN data ELSE 0 END) AS '3月' ,
SUM(CASE month WHEN 4 THEN data ELSE 0 END) AS '4月' ,
SUM(CASE month WHEN 5 THEN data ELSE 0 END) AS '5月' ,
SUM(CASE month WHEN 6 THEN data ELSE 0 END) AS '6月' ,
SUM(CASE month WHEN 7 THEN data ELSE 0 END) AS '7月' ,
SUM(CASE month WHEN 8 THEN data ELSE 0 END) AS '8月' ,
SUM(CASE month WHEN 9 THEN data ELSE 0 END) AS '9月' ,
SUM(CASE month WHEN 10 THEN data ELSE 0 END) AS '10月' ,
SUM(CASE month WHEN 11 THEN data ELSE 0 END) AS '11月' ,
SUM(CASE month WHEN 12 THEN data ELSE 0 END) AS '12月'
FROM 表A
GROUP BY ID

drop table 表A

人员 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
---- --- --- --- --- --- --- --- --- --- ---- ---- ----
001 11 12 13 14 15 16 17 18 19 110 111 112
002 21 22 23 24 25 26 27 28 29 210 211 212

(所影响的行数为 2 行)

合计每个人每年的数据
人员 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 合计
001 11 12 13 14 15 16 17 18 19 110 111 112 468
002 21 22 23 24 25 26 27 28 29 210 211 212 858

SELECT id as '人员' ,
SUM(CASE month WHEN 1 THEN data ELSE 0 END) AS '1月' ,
SUM(CASE month WHEN 2 THEN data ELSE 0 END) AS '2月' ,
SUM(CASE month WHEN 3 THEN data ELSE 0 END) AS '3月' ,
SUM(CASE month WHEN 4 THEN data ELSE 0 END) AS '4月' ,
SUM(CASE month WHEN 5 THEN data ELSE 0 END) AS '5月' ,
SUM(CASE month WHEN 6 THEN data ELSE 0 END) AS '6月' ,
SUM(CASE month WHEN 7 THEN data ELSE 0 END) AS '7月' ,
SUM(CASE month WHEN 8 THEN data ELSE 0 END) AS '8月' ,
SUM(CASE month WHEN 9 THEN data ELSE 0 END) AS '9月' ,
SUM(CASE month WHEN 10 THEN data ELSE 0 END) AS '10月' ,
SUM(CASE month WHEN 11 THEN data ELSE 0 END) AS '11月' ,
SUM(CASE month WHEN 12 THEN data ELSE 0 END) AS '12月' ,
SUM(data) as '合计'
FROM 表A
GROUP BY ID

人员 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 合计
---- --- --- --- --- --- --- --- --- --- ---- ---- ---- ----
001 11 12 13 14 15 16 17 18 19 110 111 112 468
002 21 22 23 24 25 26 27 28 29 210 211 212 858
paoluo 2007-03-29
  • 打赏
  • 举报
回复
Create View V_TEST
As
Select
compName As 公司名称,
SUM(Case addDate When 1 Then addValue Else 0 End) As 一月份,
SUM(Case addDate When 2 Then addValue Else 0 End) As 二月份,
SUM(Case addDate When 3 Then addValue Else 0 End) As 三月份,
SUM(Case addDate When 4 Then addValue Else 0 End) As 四月份,
SUM(Case addDate When 5 Then addValue Else 0 End) As 五月份,
SUM(Case addDate When 6 Then addValue Else 0 End) As 六月份,
SUM(Case addDate When 7 Then addValue Else 0 End) As 七月份,
SUM(Case addDate When 8 Then addValue Else 0 End) As 八月份,
SUM(Case addDate When 9 Then addValue Else 0 End) As 九月份,
SUM(Case addDate When 10 Then addValue Else 0 End) As 十月份,
SUM(Case addDate When 11 Then addValue Else 0 End) As 十一月份,
SUM(Case addDate When 12 Then addValue Else 0 End) As 十二月份
From

Group By
compName
GO
dawugui 2007-03-29
  • 打赏
  • 举报
回复
select 公司名称,
sum(case when adddate = 1 then addvalue else 0 end) as '一月份',
sum(case when adddate = 2 then addvalue else 0 end) as '二月份',
sum(case when adddate = 3 then addvalue else 0 end) as '三月份',
sum(case when adddate = 4 then addvalue else 0 end) as '四月份',
sum(case when adddate = 5 then addvalue else 0 end) as '五月份',
sum(case when adddate = 6 then addvalue else 0 end) as '六月份',
sum(case when adddate = 7 then addvalue else 0 end) as '七月份',
sum(case when adddate = 8 then addvalue else 0 end) as '八月份',
sum(case when adddate = 9 then addvalue else 0 end) as '九月份',
sum(case when adddate = 10 then addvalue else 0 end) as '十月份',
sum(case when adddate = 11 then addvalue else 0 end) as '十一月份',
sum(case when adddate = 12 then addvalue else 0 end) as '十二月份'
from tb
group by 公司名称
Luckyji 2007-03-29
  • 打赏
  • 举报
回复
上面数据写得有点儿问题,不过大概意思就是说,显示所有的月份的数据,然后把所有公司列出来
内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,深入阐述了该方法的数学原理及其在参数辨识中的收敛性与稳定性优势。通过构建最小化误差的目标函数,并结合数值积分技术,采用迭代方式逐步逼近系统的真实参数值,有效解决了非线性动态系统中因缺乏解析解而难以进行精确建模的问题。文中提供了完整的Matlab代码实现,涵盖模型定义、迭代求解、参数更新与结果可视化等关键环节,增强了方法的可操作性与工程实用性。研究通过典型非线性系统案例验证了算法的有效性,展示了其在科学计算与工程建模中的良好适应性与推广潜力。; 适合人群:具备常微分方程理论、数值分析基础及Matlab编程能力,从事系统建模、参数辨识、动力学仿真等相关方向的研究生、科研人员和工程技术开发者。; 使用场景及目标:①解决实际工程中非线性微分方程模型的未知参数估计问题;②深入理解Picard迭代法在科学计算中的实现机制与数值特性;③为学术论文复现、科研项目开发或课程设计提供可运行、易调试的技术方案与代码参考。; 阅读建议:建议读者结合文中的数学推导与Matlab代码逐行分析,重点关注迭代流程、目标函数构造与数值积分的耦合实现,通过修改模型结构或噪声条件进行扩展实验,以深化对算法鲁棒性与适用边界的理解。配套资源可通过指定公众号和网盘链接获取,推荐同步学习以加速科研进程。
内容概要:本文详细介绍了一种基于多尺度集成极限学习机(Extreme Learning Machine, ELM)的回归方法,并提供了完整的Matlab代码实现。该方法通过构建多尺度特征表示与集成学习机制,有效提升了ELM在处理非线性、高维复杂数据时的预测精度与模型鲁棒性,特别适用于时间序列回归任务。文档不仅阐述了算法的核心原理与技术流程,还系统展示了其在风电功率预测等工程场景中的应用潜力。同时,文中附带了丰富的科研仿真案例集合,涵盖智能优化算法、深度学习、信号处理、电力系统调度等多个前沿方向,体现了多学科交叉融合的技术优势与实践价值。; 适合人群:具备一定Matlab编程能力,从事科学研究或工程应用的研究生、科研人员及工程技术开发者,尤其适合专注于机器学习、智能算法优化、新能源预测与电力系统建模等相关领域的专业人员。; 使用场景及目标:①用于风电、光伏、负荷等时间序列数据的高精度回归预测任务;②为科研工作者提供可复现的多尺度集成ELM模型代码框架,支持快速算法验证与二次开发;③满足实际工程项目中对高效建模、实时预测与智能决策的技术需求。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解多尺度特征构造与集成策略的设计思想,同时可参考文档中其他相关算法案例进行横向比较与综合应用,以提升整体科研创新能力。

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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