CSDN-CSDN社区-MS-SQL Server-疑难问题

收藏 计算收出与支出的问题[问题点数:20,结帖人:GDTOPONE]

  • GDTOPONE
  • (IT民工)
  • 等 级:
  • 结帖率:
楼主发表于:2008-01-11 23:40:36
一个表H_COUNT

记录:

H_DAY      H_CON  H_NAME
2007-1-10    10      收入
2007-1-11    20      收入
2007-1-10      5      支出
2007-1-11      3      支出

要得到的最后结果:

日期          收入  支出
2007-1-10    10    5
2007-1-11    20    3

最后还要
SQL code
GROUP BY H_DAY

回复次数:6
#1楼 得分:0回复于:2008-01-11 23:45:37
SQL code
select 日期,
收入 = max(case when H_NAME = '收入' then H_CON else 0 end),
支出 = max(case when H_NAME = '支出' then H_CON else 0 end)
from H_COUNT 
group by 日期
#2楼 得分:0回复于:2008-01-11 23:46:35
SQL code
select 日期=H_DAY ,
收入 = max(case when H_NAME = '收入' then H_CON else 0 end),
支出 = max(case when H_NAME = '支出' then H_CON else 0 end)
from H_COUNT 
group by H_DAY 
#3楼 得分:0回复于:2008-01-12 08:42:20
SQL code

select H_DAY AS 日期,
SUM(case when H_NAME = '收入' then H_CON else 0 end) AS 收入,
SUM(case when H_NAME = '支出' then H_CON else 0 end) AS 支出
from H_COUNT 
group by H_DAY


#4楼 得分:10回复于:2008-01-12 08:44:16
应该用SUM 而非MAX 万一同一天支出或收入多次怎么办?
另外 如果不用把没收入或支出显示为 0 则可以用 (NULL而非0)
SQL code
select H_DAY AS 日期,
SUM(case when H_NAME = '收入' then H_CON else NULL end) AS 收入,
SUM(case when H_NAME = '支出' then H_CON else NULL end) AS 支出
from H_COUNT 
group by H_DAY



#5楼 得分:0回复于:2008-01-12 08:48:06

if object_id('H_COUNT') is not null
  drop table H_COUNT
go
create table H_COUNT(H_DAY varchar(10),H_CON int,H_NAME varchar(10))
insert H_COUNT
select '2007-1-10',10,'收入' union all
select '2007-1-11',20,'收入' union all
select '2007-1-10',5,'支出' union all
select '2007-1-11',3,'支出'
select H_DAY as 日期,max(case when H_NAME='收入' then H_CON end) as 收入,
            max(case when H_NAME='支出' then H_CON end) as 支出
from H_COUNT
group by H_DAY

正确
接分
  • roy_88用户头像
  • roy_88
  • (中国风)
  • 等 级:
  • 2

    4

#6楼 得分:10回复于:2008-01-12 10:04:17
SQL code
create table  H_COUNT (H_DAY datetime,               H_CON int,      H_NAME nvarchar(5))
insert H_COUNT select '2007-1-10',           10,             '收入' 
insert H_COUNT select '2007-1-11',           20,             '收入' 
insert H_COUNT select '2007-1-10',             5,             '支出' 
insert H_COUNT select '2007-1-11',             3,             '支出'

--datetime类型时,只保存日期
go

select 
	H_DAY=convert(varchar,H_DAY,120),
	sum(case when H_NAME='收入' then H_CON else 0 end) as 收入,--这里要用sum
	sum(case when H_NAME='支出' then H_CON else 0 end) as 支出--这里要用sum
from 
	H_COUNT
group by convert(varchar,H_DAY,120)

-----动态方法
declare @s nvarchar(1000)
set @s='select 	H_DAY=convert(varchar,H_DAY,120)'
select @s=@s+','+quotename(H_NAME)+'=sum(case when H_NAME='+quotename(H_NAME,'''')+' then H_CON else 0 end)'
from 
	H_COUNT 
group by H_NAME

exec (@s+' from 	H_COUNT group by convert(varchar,H_DAY,120)')

/*
H_DAY                          收入          支出          
------------------------------ ----------- ----------- 
2007-01-10 00:00:00            10          5
2007-01-11 00:00:00            20          3

(所影响的行数为 2 行)

*/

--drop table H_COUNT

相关问题
高分给高手,设计难题MS-SQL Server / 应用实例- CSDN社区community ...
交叉报表问题,急!!!! 望赐教PowerBuilder / DataWindow - CSDN社区 ...
我不知道这算不算一个问题,不过请高手看看扩充话题/ 灌水乐园- CSDN ...
关于进销存中物资出库计价的问题! MS-SQL Server / 疑难问题- CSDN社区 ...
关于订购午餐的需求问题软件工程/管理/ 开发方法版- CSDN社区community ...
高分给高手,设计难题.NET技术/ 分析与设计- CSDN社区community.csdn.net