日期:2014-05-18  浏览次数:20662 次

一个恐怖的SQL语句,头大了,向各位高手求助
有这样一个表段
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(或者空)

 

------解决方案--------------------

--> 测试数据:[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]