--创建表。
CREATE TABLE TBL_REVENUE (
FNAME VARCHAR(20) NOT NULL, --名字
FMONTH INT NOT NULL, --月份
FTYPE INT NOT NULL, --类型(0为收入,1为支出)
FMONEY DECIMAL(10,2) NOT NULL, --金额
FPURPOSE VARCHAR(100) NULL); --用途
--插入数据。
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 1, 0, 7300, '工资' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 1, 1, 200, '交手机费' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 1, 1, 168, '请哥们吃饭' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 1, 1, 600, '给老婆买化妆品' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 1, 1, 600, '吃饭' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 1, 1, 1550, '房租' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 2, 0, 7300, '工资' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 2, 1, 1200, '买手机' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 2, 1, 1550, '房租' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 2, 0, 1300, '发奖金' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老公', 2, 1, 600, '吃饭' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 1, 0, 4000, '工资' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 1, 1, 300, '交手机费' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 1, 1, 1000, '吃饭' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 1, 1, 2000, '买衣服' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 2, 0, 4100, '工资' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 2, 1, 200, '交手机费' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 2, 1, 700, '吃饭' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('老婆', 2, 1, 158, '买被' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('孩子', 1, 1, 300, '零花钱' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('孩子', 1, 1, 115, '买文具' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('孩子', 1, 1, 86, '交书费' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('孩子', 2, 1, 300, '零花钱' );
INSERT INTO TBL_REVENUE (FNAME, FMONTH, FTYPE, FMONEY, FPURPOSE) VALUES ('孩子', 2, 1, 600, '买衣服和鞋' );
--每个人,每个月的收入和支出算出来。
WITH TBL_BASE
AS (SELECT FNAME,
FMONTH,
SUM(CASE
WHEN FTYPE = 0 THEN FMONEY
ELSE 0
END) IN_MONEY,
SUM(CASE
WHEN FTYPE = 1 THEN FMONEY
ELSE 0
END) OUT_MONEY
FROM TBL_REVENUE
GROUP BY FNAME,FMONTH),
--每个人,每个月的收入和支出算出来,加入是不是小计,总计FLG的值。
TBL_LIST
AS (SELECT FNAME,
FMONTH,
IN_MONEY,
OUT_MONEY,
IN_MONEY
- OUT_MONEY LEFT_MONEY,
FNAME SORT_NM,
0 SUB_FLG,
0 TOTAL_FLG
FROM TBL_BASE),
--以人为单位的收支计算出来,记为“小计”。
TBL_SUB_TOTAL
AS (SELECT '小计' FNAME,
NULL FMONTH,
SUM(IN_MONEY) IN_MONEY,
SUM(OUT_MONEY) OUT_MONEY,
SUM(LEFT_MONEY) LEFT_MONEY,
FNAME SORT_NM,
1 SUB_FLG,
0 TOTAL_FLG
FROM TBL_LIST
GROUP BY FNAME),
--所有人的收支情况,记为“总计”。
TBL_TOTAL
AS (SELECT '总计' FNAME,
NULL FMONTH,
SUM(IN_MONEY) IN_MONEY,
SUM(OUT_MONEY) OUT_MONEY,
SUM(LEFT_MONEY) LEFT_MONEY,
'' SORT_NM,
1 SUB_FLG,
2 TOTAL_FLG
FROM TBL_SUB_TOTAL)
--把每个人以月为单位的统计,以及每个人的小计,家庭的总计统计出来。
SELECT FNAME,
FMONTH,
IN_MONEY,
OUT_MONEY,
LEFT_MONEY
FROM (SELECT FNAME,
FMONTH,
IN_MONEY,
OUT_MONEY,
LEFT_MONEY,
SORT_NM,
SUB_FLG,
TOTAL_FLG
FROM TBL_LIST
UNION ALL
SELECT FNAME,
FMONTH,
IN_MONEY,
OUT_MONEY,
LEFT_MONEY,
SORT_NM,
SUB_FLG,
TOTAL_FLG
FROM TBL_SUB_TOTAL
UNION ALL
SELECT FNAME,
FMONTH,
IN_MONEY,
OUT_MONEY,
LEFT_MONEY,
SORT_NM,
SUB_FLG,
TOTAL_FLG
FROM TBL_TOTAL) TMPTBL
ORDER BY TOTAL_FLG,
SORT_NM,
SUB_FLG,
FMONTH;
--删掉表。
DROP TABLE TBL_REVENUE;
分享到:
相关推荐
接着,为了实现小计和合计,我们创建另一个临时表#TB1。在这个过程中,我们会用到标识符(identity)列来区分原始数据和计算的数据。通过`SELECT * INTO #TB1 FROM #TB WHERE 1<>1`,我们创建了一个空的#TB1表,保留...
文章目录小计、合计与总计多...本文就来介绍一下如何使用 SQL 实现销售数据的小计、合计、总计以及多维度交叉统计和数据透视表。我们首先列出这些功能在主流数据库中的支持情况: 功能 Oracle MySQL SQL Server Po
使用了`ROLLUP`之后,查询结果不仅包含了每个在职状态的人数,还会自动添加一个总计行,该行的数据汇总了所有在职状态的人数。 #### 三、高级技巧:使用GROUPING_ID函数标识汇总行 为了更直观地区分汇总行和普通行...
下面我们将详细探讨SQL ROLLUP的用法以及其在生成小计和总计时的作用。 1. 单一维度汇总 在只有一个汇总级别时,ROLLUP会生成每个组的总和,最后还会计算所有组的总计。以下是一个示例: ```sql SELECT province ...
总结一下,`Sql Server`中的`WITH ROLLUP`操作符是进行分组统计并生成包含小计和总计报表的有效方法。它与`GROUP BY`结合使用,可以方便地生成层次化的总计,帮助用户快速理解数据的分布和总量。通过理解并熟练运用`...
- 第二种方法利用`MINUS`操作符从一个结果集中去掉另一个结果集中的所有行,从而达到选择特定行范围的目的。 ### 3. 实现分组(小计,合计) 这个查询示例展示了如何在查询结果中添加小计和总计行。 ```sql ...
在SQL(Structured Query Language)中,实现小计、合计及排序是数据分析和报表制作中常见的需求。本示例中,我们将探讨如何通过SQL语句来完成这个任务。 首先,我们创建了一个临时表#TB,用于存储测试数据。该表...
本压缩包"SQL 函数集.rar"显然是一个关于SQL函数的资源集合,特别强调了交叉表、小计、合计以及日期函数的应用。下面将详细阐述这些知识点。 1. **交叉表(Cross Tabulation)**: 交叉表也称为透视表,通常用于...
使用WITH BY子句进行数据的总计与小计操作,常见于报表生成。 以上总结知识点涵盖了Teradata SQL基础教程的多个核心内容,从关系数据库基础概念到Teradata特有的SQL命令使用,再到数据操作和函数应用,是一套较为...
在`binddata()`方法中,开发者首先定义了一个SQL语句用于从数据库中选取所有购物车条目,并按ID降序排列。然后,使用自定义的数据类`dbbind`执行这个SQL语句,将结果存储到`DataSet C2`中。接下来,创建一个新的`...
SQL中的ROLLUP操作是用于生成多级汇总数据的一种方法,尤其在处理复杂的数据分组时非常有用。在Oracle和SQL Server等数据库系统中都支持此功能。本文将深入讲解ROLLUP在SQL Server 2005中的应用,并通过实例来展示其...
另一个可能不必要的字段是`Invoice_No`,因为如果每个发票都有唯一的发票日期和客户ID组合,那么发票号就不再是必须的唯一标识符了。 **2. 列出所有按名称排序的客户** 使用SELECT语句结合ORDER BY子句即可实现: `...
本资源包包含了23个PDF文档,总计36.4M,内容全面覆盖了数据库系统的理论基础以及SQL(Structured Query Language)的实用技巧。 数据库系统是一个组织和存储数据的软件系统,它允许用户高效地查询、更新和管理数据...
`GROUP BY ALL`在某些数据库系统中是一个特殊选项,它会保留所有原始行,而不是像普通`GROUP BY`那样只保留每组的一行。然而,这个概念在不同的数据库管理系统中有不同的实现方式,有的系统可能不支持`GROUP BY ALL`...
ROLLUP 子句可以将查询结果按照一个或多个字段进行分组,并且可以生成子总计和总计。 在 Oracle 中,ROLLUP 子句可以与 GROUP BY 子句配合使用,以便对数据进行分组和聚合。ROLLUP 子句可以指定一个或多个字段,...
总之,`COMPUTE BY`子句是SQL Server中处理分组和汇总的一个强大工具,它可以提供更丰富的数据展示方式,使得数据分析和报告更加灵活和详细。在实际应用中,根据具体需求选择合适的分组和汇总方法,能够更有效地提取...
由于内容过于冗长,以下内容将对部分指定章节进行详细解释: ### 关系数据库基础 关系数据库是基于关系模型的数据库,采用一系列...本部分探讨了如何使用SQL语句实现总计和小计,以及对分组聚合结果的进一步处理。
RDLC(Report Definition Language Client Report)是微软提供的一个客户端报告设计语言,用于在.NET环境中创建和展示数据报表。它是一种XML格式,允许开发者在Windows Forms和ASP.NET应用程序中生成交互式报表。...
8. **购物车展示**:显示购物车中的商品信息,包括商品名称、市场价、优惠价、数量、小计、定金比例、定金小计,并提供删除商品的链接。 9. **总计计算**:计算购物车中所有商品的总金额、定金总计和结余(总金额...
在处理大数据时,Apache Spark 是一个非常强大的工具。特别是在数据处理与分析领域,Spark 的 DataFrame API 提供了丰富的功能来帮助用户高效地操作数据。本文将详细介绍如何在 Spark DataFrame 中将某一列中的值...