Sql的简单统计问题

shinlgienls 2009-06-17 09:43:23
图片(http://www.jobs-edu.com.cn/12.jpg)

这样的数据 经过存储过程或者SQL之后 能否操作成下面的格式


RouteStyleID month1 month2(以此类推到最后一个字段,month1前面字段保持不变就可以)
1001 54 48
1001 38 109
1001
总计 92 157
1005 14
1005 2
总计 14 2
1015
总计
1033 29
1033
1033
总计 29


希望大侠们帮我解决
...全文
27 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiequan2 2009-06-18
  • 打赏
  • 举报
回复
group by + rollup
yingzhilian2008 2009-06-18
  • 打赏
  • 举报
回复

select RouteStyleID,month1,month2 from 表名
order by RouteStyleID
compute max(RouteStyleID),sum(month1),sum(month2 ) by RouteStyleID
ai_li7758521 2009-06-18
  • 打赏
  • 举报
回复
用rollup:
Item                 Color                Quantity                   
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210

以下查询将生成小计报表:
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP

Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00


usher_gml 2009-06-17
  • 打赏
  • 举报
回复
select 
*
from
(select RouteStyleID,
[month1],[month2],[month3],[month4],[month5],[month6],
[month7],[month8],[month9],[month10],[month11] ,[month12]
from [RealTourKH].[dbo].[aView_gyz]
union all
select '合计',
sum([month1]),sum([month2]),sum([month3]),sum([month4]),sum([month5]),sum([month6]),
sum([month7]),sum([month8]),sum([month9]),sum([month10]),sum([month11]) ,sum([month12])
from [RealTourKH].[dbo].[aView_gyz]
group by RouteStyleID) a
order by RouteStyleID
ks_reny 2009-06-17
  • 打赏
  • 举报
回复

select
*
from
(select RouteStyleID,
[month1],[month2],[month3],[month4],[month5],[month6],
[month7],[month8],[month9],[month10],[month11] ,[month12]
from [RealTourKH].[dbo].[aView_gyz]
union all
select RouteStyleID+'合计',
sum([month1]),sum([month2]),sum([month3]),sum([month4]),sum([month5]),sum([month6]),
sum([month7]),sum([month8]),sum([month9]),sum([month10]),sum([month11]) ,sum([month12])
from [RealTourKH].[dbo].[aView_gyz]
group by RouteStyleID) a
order by RouteStyleID
shinlgienls 2009-06-17
  • 打赏
  • 举报
回复
--这里是SQL
SELECT
[ContinentName],[ContinentID],[RouteStyleName],[RouteStyleID],[SysStyleID],[SysStyleName],[month1]
,[month2],[month3],[month4],[month5],[month6],[month7],[month8],[month9],[month10],[month11]
,[month12],[SysStyleTotalNums]
FROM [RealTourKH].[dbo].[aView_gyz]
order by [ContinentID],[RouteStyleID],[SysStyleID]
--希望能帮我解决问题
--小F-- 2009-06-17
  • 打赏
  • 举报
回复
/*---参考
问题:如果上述两表互相换一下:即表结构和数据为:
姓名 语文 数学 物理
张三 74  83  93
李四 74  84  94
想变成(得到如下结果):
姓名 课程 分数
---- ---- ----
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
--------------
*/

create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)
insert into tb values('张三',74,83,93)
insert into tb values('李四',74,84,94)
go

--SQL SERVER 2000 静态SQL。
select * from
(
select 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 , 课程 = '物理' , 分数 = 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end

--SQL SERVER 2000 动态SQL。
--调用系统表动态生态。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')

--SQL SERVER 2005 动态SQL。
select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t

--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。

--------------------
/*
问题:在上述的结果上加个平均分,总分,得到如下结果:
姓名 课程 分数
---- ------ ------
李四 语文 74.00
李四 数学 84.00
李四 物理 94.00
李四 平均分 84.00
李四 总分 252.00
张三 语文 74.00
张三 数学 83.00
张三 物理 93.00
张三 平均分 83.33
张三 总分 250.00
------------------
*/

select * from
(
select 姓名 as 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 as 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 as 姓名 , 课程 = '物理' , 分数 = 物理 from tb
union all
select 姓名 as 姓名 , 课程 = '平均分' , 分数 = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) from tb
union all
select 姓名 as 姓名 , 课程 = '总分' , 分数 = 语文 + 数学 + 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end

drop table tb
ks_reny 2009-06-17
  • 打赏
  • 举报
回复

select
*
from
(select RouteStyleID, month1,month2,month3,.....from a
union all
select RouteStyleID+'合计',sum(month1),sum(month2),sum(month3),..... from a
group by RouteStyleID) a
order by RouteStyleID
nalnait 2009-06-17
  • 打赏
  • 举报
回复
rollup

27,579

社区成员

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

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