这个怎么搞?

lsfv001001 2009-11-07 12:34:46
形如这样的表
item datemonth money
技术费 1月 10000
技术费 1月 20000
技术费 2月 20000
技术费 3月 50000
业务费 1月 20000
业务费 2月 30000
业务费 3月 50000
业务费 3月 20000


用sql脚本得到

item 1月 2月 3月 平均
技术费 30000 20000 50000 30000
业务费 20000 30000 70000 40000
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2009-11-07
  • 打赏
  • 举报
回复
/*
-- Author:SQL77--RICHIE
-- Version:V1.001 Date:2008-05-15--转Flystone

*/

-- Test Data: TB
If object_id('TB') is not null
Drop table TB
Go
Create table TB(NAME VARCHAR(10),itemdatemonth int,[money] int)
Go
Insert into TB
SELECT '技术费',1,10000 union all
SELECT '技术费',1,20000 union all
SELECT '技术费',2,20000 union all
SELECT '技术费',3,50000 union all
SELECT '业务费',1,20000 union all
SELECT '业务费',2,30000 union all
SELECT '业务费',3,50000 union all
SELECT '业务费',3,20000
Go
--Start
Select NAME,
SUM(CASE WHEN itemdatemonth=1 THEN MONEY ELSE 0 END)AS '1',
SUM(CASE WHEN itemdatemonth=2 THEN MONEY ELSE 0 END)AS '2',
SUM(CASE WHEN itemdatemonth=3 THEN MONEY ELSE 0 END)AS '3',
(SELECT SUM(MONEY)/COUNT(DISTINCT itemdatemonth) FROM TB WHERE NAME=T.NAME )AS AVGMONEY
from TB T
GROUP BY NAME


--Result:
/*

(所影响的行数为 8 行)

NAME 1 2 3 AVGMONEY
---------- ----------- ----------- ----------- -----------
技术费 30000 20000 50000 33333
业务费 20000 30000 70000 40000

(所影响的行数为 2 行)




*/
--End
SQL77 2009-11-07
  • 打赏
  • 举报
回复
/*
-- Author:SQL77--RICHIE
-- Version:V1.001 Date:2008-05-15--转Flystone

*/

-- Test Data: TB
If object_id('TB') is not null
Drop table TB
Go
Create table TB(NAME VARCHAR(10),itemdatemonth int,[money] int)
Go
Insert into TB
SELECT '技术费',1,10000 union all
SELECT '技术费',1,20000 union all
SELECT '技术费',2,20000 union all
SELECT '技术费',3,50000 union all
SELECT '业务费',1,20000 union all
SELECT '业务费',2,30000 union all
SELECT '业务费',3,50000 union all
SELECT '业务费',3,20000
Go
--Start
Select NAME,
SUM(CASE WHEN itemdatemonth=1 THEN MONEY ELSE 0 END)AS '1',
SUM(CASE WHEN itemdatemonth=2 THEN MONEY ELSE 0 END)AS '2',
SUM(CASE WHEN itemdatemonth=3 THEN MONEY ELSE 0 END)AS '3',
AVG(MONEY)AS AVGMONEY
from TB
GROUP BY NAME


--Result:
/*

(所影响的行数为 8 行)

NAME 1 2 3 AVGMONEY
---------- ----------- ----------- ----------- -----------
技术费 30000 20000 50000 25000
业务费 20000 30000 70000 30000

(所影响的行数为 2 行)



*/
--End
xiequan2 2009-11-07
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([item] varchar(6),[datemonth] varchar(3),[money] int)
insert [tb]
select '技术费','1月',10000 union all
select '技术费','1月',20000 union all
select '技术费','2月',20000 union all
select '技术费','3月',50000 union all
select '业务费','1月',20000 union all
select '业务费','2月',30000 union all
select '业务费','3月',50000 union all
select '业务费','3月',20000


--sql2005静态
select *,[avg]=([1月]+[2月]+[3月])/3 from [tb]
pivot
(
sum(money) for [datemonth] in([1月],[2月],[3月])
) p

---sql2000


select item,
[1月]=sum(case when datemonth='1月' then [money] else 0 end),
[2月]=sum(case when datemonth='2月' then [money] else 0 end),
[3月]=sum(case when datemonth='3月' then [money] else 0 end),
[avg]=sum(money)/(select count(distinct [datemonth]) from tb where item=t.item)
from tb t group by item


/*

item 1月 2月 3月 avg
------ ----------- ----------- ----------- -----------
技术费 30000 20000 50000 33333
业务费 20000 30000 70000 40000

*/
xiequan2 2009-11-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091013/15/9f058df7-4d29-47bf-a338-b63fcab2abc0.html?51371

精华贴里很多
chinaly 2009-11-07
  • 打赏
  • 举报
回复

if object_id('[tb1]') is not null drop table [tb1]
go
create table [tb1]([item] varchar(6),[datemonth] varchar(3),[money] int)
insert [tb1]
select '技術費','1月',10000 union all
select '技術費','1月',20000 union all
select '技術費','2月',20000 union all
select '技術費','3月',50000 union all
select '業務費','1月',20000 union all
select '業務費','2月',30000 union all
select '業務費','3月',50000 union all
select '業務費','3月',20000

select item,
sum(case when datemonth='1月' then [money] else 0 end) '1月',
sum(case when datemonth='2月' then [money] else 0 end) '2月',
sum(case when datemonth='3月' then [money] else 0 end) '3月',
avg([money])
from tb1 group by item
--小F-- 2009-11-07
  • 打赏
  • 举报
回复
---动态的
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-11-07 14:41:47
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([item] varchar(6),[datemonth] varchar(3),[money] int)
insert [tb]
select '技术费','1月',10000 union all
select '技术费','1月',20000 union all
select '技术费','2月',20000 union all
select '技术费','3月',50000 union all
select '业务费','1月',20000 union all
select '业务费','2月',30000 union all
select '业务费','3月',50000 union all
select '业务费','3月',20000
--------------开始查询--------------------------
declare @sql varchar(8000)
set @sql = 'select item '
select @sql = @sql + ' , sum(case datemonth when ''' + datemonth + ''' then money else 0 end) [' + datemonth + ']'
from (select distinct datemonth from tb) as a
set @sql = @sql + ' , cast(avg(money*1.0) as decimal(18,2)) 平均 from tb group by item'
exec(@sql)
----------------结果----------------------------
/* item 1月 2月 3月 平均
------ ----------- ----------- ----------- ---------------------------------------
技术费 30000 20000 50000 25000.00
业务费 20000 30000 70000 30000.00

(2 行受影响)
*/

22,209

社区成员

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

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