求一SQL语句

wjh_36 2010-06-27 06:35:59
表结构如下:
id   wzid wzbt     fs       lx
5 10 花飘万家雪 80 t
6 11 大规模 50 t
7 11 大规模 30 j
8 11 大规模 20
10 11 大规模 30 t
显示结果如下:
wzid  wzbt   fs
10    花飘万家雪  80
11    大规模    90
按wzid和wzbt合计外,还要看LX,LX分为t,j,''(空)LX相同的加完还要平均
如11,LX有2个T ,(50+30)/2+30+20=90
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ask_chang 2010-06-29
  • 打赏
  • 举报
回复
select a.wzid,a.wzbt,sum(a.fs) as fs from
(select wzid,avg(fs) as fs from tb group by wzid,lx)a
group by a.wzid


先求平均,在求和
htl258_Tony 2010-06-27
  • 打赏
  • 举报
回复
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[wzid] [int],[wzbt] [nvarchar](10),[fs] [int],[lx] [nvarchar](10))
INSERT INTO [tb]
SELECT '5','10','花飘万家雪','80','t' UNION ALL
SELECT '6','11','大规模','50','t' UNION ALL
SELECT '7','11','大规模','30','j' UNION ALL
SELECT '8','11','大规模','20',NULL UNION ALL
SELECT '10','11','大规模','30','t'

--SELECT * FROM [tb]

-->SQL查询如下:
;WITH t AS
(
SELECT *,sumfs=AVG(fs)OVER(PARTITION BY wzid,lx),
flag=ROW_NUMBER()OVER(PARTITION BY wzid,lx ORDER BY id)
FROM tb
)
SELECT [wzid], [wzbt],SUM(sumfs) fs
FROM t
WHERE flag=1
GROUP BY [wzid], [wzbt]
ORDER BY 1
/*
wzid wzbt fs
----------- ---------- -----------
10 花飘万家雪 80
11 大规模 90

(2 行受影响)
*/
wjh_36 2010-06-27
  • 打赏
  • 举报
回复
执行过了,不对,我上面只是一少部分数据,一个WZID可能有多个T,多个J和多个‘’
wjh_36 2010-06-27
  • 打赏
  • 举报
回复
在线等
feixianxxx 2010-06-27
  • 打赏
  • 举报
回复
create  table tests
(
WZID int,
WZBT varchar(100),
RYDM int,
RYNC varchar(10),
yhqx varchar(10)
)
insert tests select
10, '花飘万家雪', 40,'0', 't' union all select
11, '大规模', 50 ,'ccc' ,'t' union all select
11, '大规模', 30 ,'aaa' ,'j' union all select
11, '大规模', 20 ,'bbb' ,null union all select
11 ,'大规模', 30 ,'ddd' ,'t'
go
select WZID,WZBT,FS=SUM(FS)
FROM (
select *
from (
select WZID,WZBT,avg(RYDM) as fs
from tests
where yhqx='t'
group by WZID,WZBT) k
union all
select *
from (
select WZID,WZBT,sum(RYDM) as fs
from tests
where yhqx<>'t' OR yhqx IS NULL
group by WZID,WZBT) k) K
GROUP BY WZID,WZBT
ORDER BY WZID
/*
WZID WZBT FS
----------- ---------------------------------------------------------------------------------------------------- -----------
10 花飘万家雪 40
11 大规模 90

(2 行受影响)

*/

这样不行?

27,579

社区成员

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

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