一个恐怖的SQL语句,头大了,向各位高手求助

小哥哥 2012-01-30 09:41:09
有这样一个表段
name pay pay_yes_no
huang 2000 结算
yang 5000 未结算
li 1200 未结算
huang 3000 未结算
huang 4000 结算

我想输出的结果在一个表里实现:
name pay pay_yes_no(输出结算的数目)
huang 9000 6000
yang 2000 0(或者空)
li 1200 0(或者空)

...全文
725 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
喜阳阳 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiangshun 的回复:]
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([name] varchar(5),[pay] int,[pay_yes_no] varchar(6))
insert [TB]
select 'huang',2000,'结算' union all
select 'ya……
[/Quote]顶2楼
Choerodon2 2012-02-03
  • 打赏
  • 举报
回复
楼主,出来结贴啦。
f152520843 2012-02-03
  • 打赏
  • 举报
回复

select name,sum(pay) [pay],
sum(case when pay_yes_no='结算' then pay else 0 end) [已结算]
from tb
group by [name]

2楼正解 可以结贴了

hejina 2012-02-03
  • 打赏
  • 举报
回复
create table [#TB]([name] varchar(5),[pay] int,[pay_yes_no] varchar(6))
insert [#TB]
select 'huang',2000,'结算' union all
select 'yang',5000,'未结算' union all
select 'li',1200,'未结算' union all
select 'huang',3000,'未结算' union all
select 'huang',4000,'结算'


select * from #TB

select Name,sum(pay)pay ,isnull((select sum(b.pay) from #TB b where b.Name=a.Name and b.pay_yes_no='结算'),0) pay_yes_no from #TB a group by [Name]
调试过了,没问题的
qxyywy 2012-02-02
  • 打赏
  • 举报
回复
看了下查询开销 2楼的和我在8 楼写的都是一样的
yslwl 2012-02-02
  • 打赏
  • 举报
回复
用2楼的即可
槑党--一缕风 2012-01-31
  • 打赏
  • 举报
回复
2楼正解,分析函数可以提高统计的速度
liuym2010 2012-01-31
  • 打赏
  • 举报
回复
厉害,厉害!
既生瑜 2012-01-30
  • 打赏
  • 举报
回复
2楼写的很好,学习了!
netshuiwa 2012-01-30
  • 打赏
  • 举报
回复
支持2楼
tmd456 2012-01-30
  • 打赏
  • 举报
回复
2楼的更精简
hebeijg 2012-01-30
  • 打赏
  • 举报
回复
支持2楼
学习了
qxyywy 2012-01-30
  • 打赏
  • 举报
回复
2楼的更精简
qxyywy 2012-01-30
  • 打赏
  • 举报
回复
WITH temp AS(
SELECT [name],SUM(pay) pay ,
CASE when pay_yes_no='结算' then sum(pay) else 0 end pay_yes_no
FROM testsql t GROUP BY [name],pay_yes_no
)
SELECT [name],SUM(pay) pay,sum(pay_yes_no) pay_yes_no FROM temp GROUP BY [name]
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiangshun 的回复:]
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([name] varchar(5),[pay] int,[pay_yes_no] varchar(6))
insert [TB]
select 'huang',2000,'结算' union all
select 'ya……
[/Quote]
正解 顶
ZhangNan20100811 2012-01-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiangshun 的回复:]
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([name] varchar(5),[pay] int,[pay_yes_no] varchar(6))
insert [TB]
select 'huang',2000,'结算' union all
select 'ya……
[/Quote]
mark ...
jianshao810 2012-01-30
  • 打赏
  • 举报
回复
这个简单嘛。
case pay_yes_no when
顶 2楼
EnForGrass 2012-01-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiangshun 的回复:]
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([name] varchar(5),[pay] int,[pay_yes_no] varchar(6))
insert [TB]
select 'huang',2000,'结算' union all
select 'ya……
[/Quote]
UP +1
bdmh 2012-01-30
  • 打赏
  • 举报
回复
case 语句即可解决
jiangshun 2012-01-30
  • 打赏
  • 举报
回复

--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([name] varchar(5),[pay] int,[pay_yes_no] varchar(6))
insert [TB]
select 'huang',2000,'结算' union all
select 'yang',5000,'未结算' union all
select 'li',1200,'未结算' union all
select 'huang',3000,'未结算' union all
select 'huang',4000,'结算'

select
[name],
pay=SUM([pay]),
pay_yes_no=SUM(case when [pay_yes_no]='结算' then [pay] else 0 end)
from [TB]
group by [name]

/*
name pay pay_yes_no
----- ----------- -----------
huang 9000 6000
li 1200 0
yang 5000 0

(3 行受影响)


*/
drop table [TB]
加载更多回复(4)

34,575

社区成员

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

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