MySQL春节收支表怎么建立_怎么用SQL语句对表【收支表】进行分类汇总?

展开全部

--建立测试表 并插入数据

-- 执行一个查询 ,你可以写在一个存储过程里面,我困了,不过636f70793231313335323631343130323136353331333337383965格式按照你说的写好了CREATE TABLE TB

(说明 NVARCHAR(20)

,

类别 NVARCHAR(20),

金额 INT ,

款项类别 NVARCHAR(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目A', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

900, -- 金额 - int

N'费用B'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目A', -- 说明 - nvarchar(20)

N'收入', -- 类别 - nvarchar(20)

2000, -- 金额 - int

N'收入A'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目B', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

3500, -- 金额 - int

N'费用C'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目C', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

200, -- 金额 - int

N'费用D'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目A', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

300, -- 金额 - int

N'费用A'  -- 款项类别 - nvarchar(20)

)CREATE TABLE #temp

(

说明 NVARCHAR(20) ,

类别 NVARCHAR(20) ,

金额 INT ,

款项类别 NVARCHAR(20)

)

INSERT  INTO #temp

SELECT  *

FROM    dbo.TB

UNION ALL

SELECT  说明 ,

CASE WHEN 说明 IS NOT  NULL THEN ISNULL(类别, '收支净值')

ELSE 类别

END + '合计' AS 类别 ,

SUM(CASE WHEN 类别 = '收入' THEN 金额

ELSE -金额

END) AS 金额 ,

MAX(款项类别) AS 款项类别

FROM    TB

WHERE   说明 IS NOT NULL

GROUP BY ROLLUP(说明, 类别)

ORDER BY 说明

INSERT  #temp

SELECT  B.*

FROM    ( SELECT DISTINCT

说明 ,

'收入合计' AS 类别 ,

0 AS 金额 ,

'' AS 款项类别

FROM      #temp

WHERE     说明 IS NOT NULL

) B

WHERE   B.说明 + B.类别 NOT IN ( SELECT 说明 + 类别

FROM   #temp

WHERE  说明 IS NOT NULL )

INSERT  #temp

SELECT  B.*

FROM    ( SELECT DISTINCT

说明 ,

'支出合计' AS 类别 ,

0 AS 金额 ,

'' AS 款项类别

FROM      #temp

WHERE     说明 IS NOT NULL

) B

WHERE   B.说明 + B.类别 NOT IN ( SELECT 说明 + 类别

FROM   #temp

WHERE  说明 IS NOT NULL );

WITH    tt

AS ( SELECT   说明 ,

类别 ,

CASE WHEN 类别 = '支出合计' THEN ABS(金额)

ELSE 金额

END AS 金额 ,

CASE WHEN 类别 = '收入'

OR 类别 = '支出' THEN 款项类别

ELSE ''

END AS 款项类别 ,

CASE WHEN 类别 = '支出' THEN 1

WHEN 类别 = '收入' THEN 2

WHEN 类别 = '收入合计' THEN 3

WHEN 类别 = '支出合计' THEN 4

WHEN 类别 = '收支净值合计' THEN 5

ELSE 6

END AS num

FROM     #temp

WHERE    说明 IS NOT NULL

)

SELECT  tt.说明 ,

tt.类别 ,

tt.金额 ,

tt.款项类别

FROM    tt

ORDER BY 说明 ,

num

DROP TABLE #temp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值