这样的分组怎么实现?

yooono 2008-05-30 08:56:12
现有表
id lx value
1 a 10
2 b 20
3 b 11
4 a 15
5 a 16
生成查询
如果lx为a则表示一班,b表示2班,值是所有lx为a的和
一班 二版
(10+15+16) (20+11)
...全文
113 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yooono 2008-05-30
  • 打赏
  • 举报
回复
SELECT 一班 = SUM(CASE WHEN lx = 'a' THEN val ELSE 0 END),
二班 = SUM(CASE WHEN lx = 'b' THEN val ELSE 0 END)
FROM test
最终是这么用的,只要一行
是不是这样效率比较慢呀
yooono 2008-05-30
  • 打赏
  • 举报
回复
俄,我就是横向不会,没专业搞过sql,谢谢大家
hery2002 2008-05-30
  • 打赏
  • 举报
回复
 
declare @tb table ([id] int,[lx] nvarchar(1),[value] nvarchar(10))
Insert into @tb
select 1,'a',10 union all
select 2,'b',20 union all
select 3,'b',11 union all
select 4,'a',15 union all
select 5,'a',16

--Select * from @tb
SELECT [lx],
MAX( CASE seq WHEN 1 THEN [value] ELSE '0' END ) + '+' +
MAX( CASE seq WHEN 2 THEN [value] ELSE '0' END ) + '+' +
--MAX( CASE seq WHEN 3 THEN [value] ELSE '' END ) + '+ ' +
MAX( CASE seq WHEN 3 THEN [value] ELSE '0' END ) as expression
FROM ( SELECT p1.[lx], p1.[value],
( SELECT COUNT(*)
FROM @tb p2
WHERE p2.[lx] = p1.[lx]
AND p2.[value] <= p1.[value] )
FROM @tb p1 ) D ( [lx], [value], seq )
GROUP BY [lx] ;
/*
lx expression
---- --------------------------------
a 10+15+16
b 11+20+0

(2 row(s) affected)
*/
Limpire 2008-05-30
  • 打赏
  • 举报
回复
--> 横向
select
一班=sum(case lx when 'a' then value else 0 end),
二版=sum(case lx when 'b' then value else 0 end)
from table_name
group by table_name

--> 纵向
select lx, sum(value) from table_name group by lx
gutlgutl 2008-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 skyzcl 的回复:]
SQL codeselect lx,sum(value) from tb group by lx
[/Quote]
chuifengde 2008-05-30
  • 打赏
  • 举报
回复
select 
一班=sum(case when lx='a' then value else 0 end ),
二班=sum(case when lx='b' then value else 0 end )
from [Table] group by lx
skyzcl 2008-05-30
  • 打赏
  • 举报
回复
select lx,sum(value) from tb group by lx

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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