34,838
社区成员




create table tb(客户 varchar(10), 类型 varchar(10),金额 int,日期 datetime)
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '实收', 500 , '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '实收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
select 客户,sum(case when 类型='应收' then 金额 end)-sum(case when 类型='实收' then 金额 end)
from tb
group by 客户
-------楼主把结果贴错了吧 ?
create table tb(客户 varchar(10), 类型 varchar(10),金额 int,日期 datetime)
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '实收', 500 , '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '实收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
go
select 客户,应收,实收,欠款=应收-实收 from
(select 客户,
应收=sum(case 类型 when '应收' then 金额 else 0 end),
实收=sum(case 类型 when '实收' then 金额 else 0 end)
from tb group by 客户)a
where 应收>实收
create table tb(客户 varchar(10), 类型 varchar(10),金额 int,日期 datetime)
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '实收', 500 , '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '实收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
go
select * , 欠收 = 应收 - 实收 from
(
select 客户 , 月份 = convert(varchar(7),日期,120),
sum(case 类型 when '应收' then 金额 else 0 end) 应收,
sum(case 类型 when '实收' then 金额 else 0 end) 实收
from tb
group by 客户 , convert(varchar(7),日期,120)
) t
where 应收 > 实收
drop table tb
/*
客户 月份 应收 实收 欠收
---------- ------- ----------- ----------- -----------
公司1 2008-01 3000 500 2500
公司2 2008-01 2000 1000 1000
(所影响的行数为 2 行)
*/
create table tb(客户 varchar(10), 类型 varchar(10),金额 int,日期 datetime)
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '实收', 500 , '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司1', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
insert into tb values('公司2', '实收', 1000, '2008-1-1')
insert into tb values('公司2', '应收', 1000, '2008-1-1')
go
select * from
(
select 客户 , 月份 = convert(varchar(7),日期,120),
sum(case 类型 when '应收' then 金额 else 0 end) 应收,
sum(case 类型 when '实收' then 金额 else 0 end) 实收
from tb
group by 客户 , convert(varchar(7),日期,120)
) t
where 应收 > 实收
drop table tb
/*
客户 月份 应收 实收
---------- ------- ----------- -----------
公司1 2008-01 3000 500
公司2 2008-01 2000 1000
(所影响的行数为 2 行)
*/
select * from
(
select 客户 , 月份 = convert(varchar(7),日期,120),
sum(case 类型 when '应收' then 金额 else 0 end) 应收,
sum(case 类型 when '实收' then 金额 else 0 end) 实收
from tb
group by 客户 , convert(varchar(7),日期,120)
) t
where 应收 > 实收
select 客户,应收=sum(case when 类型='应收' then 金额 else 0 end),
实收=sum(case when 类型='实收' then 金额 else 0 end),
欠款=sum(case when 类型='应收' then 金额 else -1*金额 end) from tab
group by 客户