SQL 报表 --简易进销系统
模型图:
-- ============================================
-- Author: lifu
-- Create Date: 2017-06-18
-- Descrpition: 简化进销系统 报表制作
-- ============================================ -- Tables And Data Start ======================
CREATE DATABASE SimpleEntrySystem
GO
USE SimpleEntrySystem
GO
--创建T_Person表 人员表
CREATE TABLE T_Person
(
FId VARCHAR(20) NOT NULL ,
FNumber VARCHAR(20) , --人员工号
FName VARCHAR(20) , --人员姓名
FManagerId VARCHAR(20) , --上级主管主键(指向T_Person表的 FId字段的外键)
PRIMARY KEY ( FId ) ,
FOREIGN KEY ( FManagerId ) REFERENCES T_Person ( Fid )
)
--创建T_Merchandise表 商品表
CREATE TABLE T_Merchandise
(
FId VARCHAR(20) NOT NULL ,
FNumber VARCHAR(20) , --商品编号
FName VARCHAR(20) , --商品名
FPrice INT , --商品价格
PRIMARY KEY ( fid )
)
--创建T_SaleBill表 销售单主表
CREATE TABLE T_SaleBill
(
FId VARCHAR(20) NOT NULL ,
FNumber VARCHAR(20) , --销售单编号
FBillMakerId VARCHAR(20) ,--开单人主键(指向T_Person表的 FId字段的外键)
FMakeDate DATETIME , --制单日期
FConfirmDate DATETIME , --确认日期
PRIMARY KEY ( fid ) ,
FOREIGN KEY ( Fbillmakerid ) REFERENCES T_Person ( fid )
)
--创建T_SaleBillDetail表 销售单明细记录
CREATE TABLE T_SaleBillDetail
(
FId VARCHAR(20) ,
FBillId VARCHAR(20) , --主表主键(指向 T_SaleBill 表的 FId 字段的外键)
FMerchandiseId VARCHAR(20) , --商品主键(指向T_Merchandise表的FId字段的外键)
FCount INT , --销售数量
PRIMARY KEY ( fid ) ,
FOREIGN KEY ( Fbillid ) REFERENCES T_SaleBill ( fid ) ,
FOREIGN KEY ( Fmerchandiseid ) REFERENCES T_Merchandise ( fid )
)
--创建T_PurchaseBill表 采购单主表
CREATE TABLE T_PurchaseBill
(
Fid VARCHAR(20) NOT NULL ,
FNumber VARCHAR(20) , --采购单编号
FBillMakerId VARCHAR(20) ,--开单人主键(指向T_Person表的FId字段的外键)
FMakeDate DATETIME , --制单日期
FConfirmDate DATETIME , --确认日期
PRIMARY KEY ( fid ) ,
FOREIGN KEY ( FBillMakerId ) REFERENCES T_Person ( fid )
)
--创建T_PurchaseBillDetail表 采购单明细记录
CREATE TABLE T_PurchaseBillDetail
(
FId VARCHAR(20) NOT NULL ,
FBillId VARCHAR(20) , --主表主键(指向T_PurchaseBill表的FId字段的外键)
FMerchandiseId VARCHAR(20) ,--商品主键(指向T_Merchandise表的FId字段的外键)
FCount INT , --采购数量
PRIMARY KEY ( FId ) ,
FOREIGN KEY ( FBillId ) REFERENCES T_PurchaseBill ( FId ) ,
FOREIGN KEY ( FMerchandiseId ) REFERENCES T_Merchandise ( FId )
)
--首先向T_Person、T_Merchandise两张表中插入演示数据:
INSERT INTO T_Person ( FId, FNumber, FName, FManagerId )
VALUES ( '', '', 'Robert', NULL )
INSERT INTO T_Person ( FId, FNumber, FName, FManagerId )
VALUES ( '', '', 'John', '' )
INSERT INTO T_Person ( FId, FNumber, FName, FManagerId )
VALUES ( '', '', 'Tom', '' )
INSERT INTO T_Person ( FId, FNumber, FName, FManagerId )
VALUES ( '', '', 'Jim', '' )
INSERT INTO T_Person ( FId, FNumber, FName, FManagerId )
VALUES ( '', '', 'Lily', '' )
INSERT INTO T_Person ( FId, FNumber, FName, FManagerId )
VALUES ( '', '', 'Merry', '' )
INSERT INTO T_Merchandise ( FId, FNumber, FName, FPrice )
VALUES ( '', '', 'Bacon', 30 )
INSERT INTO T_Merchandise ( FId, FNumber, FName, FPrice )
VALUES ( '', '', 'Cake', 2 )
INSERT INTO T_Merchandise ( FId, FNumber, FName, FPrice )
VALUES ( '', '', 'Apple', 6 ) -- 还要向T_SaleBill和T_PurchaseBill表中插入演示数据:
INSERT INTO T_SaleBill ( FId, FNumber, FBillMakerId, FMakeDate, FConfirmDate )
VALUES ( '', '', '', '2007-03-15', '2007-05-15' )
INSERT INTO T_SaleBill ( FId, FNumber, FBillMakerId, FMakeDate, FConfirmDate )
VALUES ( '', '', NULL, '2006-01-25', '2006-02-03' )
INSERT INTO T_SaleBill ( FId, FNumber, FBillMakerId, FMakeDate, FConfirmDate )
VALUES ( '', '', '', '2006-02-12', '2007-01-11' )
INSERT INTO T_SaleBill ( FId, FNumber, FBillMakerId, FMakeDate, FConfirmDate )
VALUES ( '', '', '', '2008-05-25', '2008-06-15' )
INSERT INTO T_SaleBill ( FId, FNumber, FBillMakerId, FMakeDate, FConfirmDate )
VALUES ( '', '', '', '2008-03-17', '2007-04-15' )
INSERT INTO T_SaleBill ( FId, FNumber, FBillMakerId, FMakeDate, FConfirmDate )
VALUES ( '', '', '', '2002-02-03', '2007-11-11' )
INSERT INTO T_PurchaseBill ( FId, FNumber, FBillMakerId, FMakeDate,
FConfirmDate )
VALUES ( '', '', '', '2007-02-15', '2007-02-15' )
INSERT INTO T_PurchaseBill ( FId, FNumber, FBillMakerId, FMakeDate,
FConfirmDate )
VALUES ( '', '', '', '2003-02-25', '2006-03-03' )
INSERT INTO T_PurchaseBill ( FId, FNumber, FBillMakerId, FMakeDate,
FConfirmDate )
VALUES ( '', '', '', '2007-02-12', '2007-07-12' )
INSERT INTO T_PurchaseBill ( FId, FNumber, FBillMakerId, FMakeDate,
FConfirmDate )
VALUES ( '', '', '', '2007-05-25', '2007-06-15' )
INSERT INTO T_PurchaseBill ( FId, FNumber, FBillMakerId, FMakeDate,
FConfirmDate )
VALUES ( '', '', '', '2007-03-17', '2007-04-15' )
INSERT INTO T_PurchaseBill ( FId, FNumber, FBillMakerId, FMakeDate,
FConfirmDate )
VALUES ( '', '', NULL, '2006-02-03', '2006-11-20' ) -- 向T_SaleBillDetail表和T_PurchaseBillDetail表中插入演示数据:
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 20 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 30 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 22 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 12 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 11 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 60 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 2 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 5 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 16 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 8 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 9 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 6 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 26 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 66 )
INSERT INTO T_SaleBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 518 ) INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 12 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 20 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 32 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 18 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 88 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 19 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 6 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 2 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 20 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 18 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 19 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 26 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 3 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 22 )
INSERT INTO T_PurchaseBillDetail ( FId, FBillId, FMerchandiseId, FCount )
VALUES ( '', '', '', 168 ) -- Tables And Data End ======================= -- 报表===================================================================
USE [SimpleEntrySystem]
GO
-- 显示制单人详细信息
SELECT [FNumber], [FBillMakerId], [FMakeDate]
FROM [dbo].[T_SaleBill]
--inner join 需要知道是哪个人开的单
SELECT [s].[FNumber], [p].[FName], [s].[FMakeDate]
FROM [dbo].[T_SaleBill] AS [s]
INNER JOIN [dbo].[T_Person] AS [p] ON [s].[FBillMakerId] = [p].[FId]
--left outer join 需要将空的开单人标识
SELECT [s].[FNumber], COALESCE([p].[FName], '没有开单人'), [s].[FMakeDate]
FROM [dbo].[T_SaleBill] AS [s]
LEFT OUTER JOIN [dbo].[T_Person] AS [p] ON [s].[FBillMakerId] = [p].[FId] -- 显示销售单的信息
/*
要求列出所有销售单的详细信息,每行显示销售单的每一条销售记录,同时每行头部要
显示此行所属的销售单的信息,比如单号、开单人、开单日期等。T_SaleBillDetail表保存的
是销售单的每一条销售记录,T_SaleBill表保存的是销售单的头信息,T_SaleBillDetail表的
FMerchandiseId字段保存的是销售的商品主键,而 T_SaleBill表的 FBillMakerId字段保存的
是开单人的主键,只要对这四张表做连接查询即可。由于 T_SaleBill表的 FBillMakerId字段
有可能为空,所以在 T_SaleBill 表和 T_Person 表进行连接的时候要使用左外连接,而为了
提高查询效率其他连接都使用内连接
*/
SELECT [saleBill].[FNumber] AS '销售单编号',
COALESCE([person].[FName], '没有开单人') AS '开单人',
[saleBill].[FMakeDate] AS '销售时间', [merchandise].[FName] AS '商品名称',
[saleBillDetail].[FCount] AS '销售数量'
FROM [dbo].[T_SaleBill] AS [saleBill]
LEFT OUTER JOIN [dbo].[T_Person] AS [person] ON [saleBill].[FBillMakerId] = [person].[FId]
INNER JOIN [dbo].[T_SaleBillDetail] AS [saleBillDetail] ON saleBillDetail.[FBillId] = [saleBill].[FId]
INNER JOIN [dbo].[T_Merchandise] AS [merchandise] ON [merchandise].[FId] = [saleBillDetail].[FMerchandiseId]
ORDER BY [saleBill].[FMakeDate] DESC --收益计算
/*
要求计算每种商品的总收益, 受收益的定义为所有的销售单中该商品的销售总额减去所
有的采购单中该商品的购买总额。
*/
----------------------------------------------------------------------------------
--销售额
SELECT [m].[FName] AS '商品名称', [m].[FPrice] * [sbd].[FCount] AS '销售额'
FROM [dbo].[T_Merchandise] AS [m]
INNER JOIN [dbo].[T_SaleBillDetail] AS [sbd] ON [m].[FId] = [sbd].[FMerchandiseId] UNION ALL --采购额
SELECT [m].[FName] AS '商品名称', [m].[FPrice] * [pbd].[FCount] * ( -1 ) AS '采购额'
FROM [dbo].[T_Merchandise] AS [m]
INNER JOIN [dbo].[T_PurchaseBillDetail] AS [pbd] ON [m].[FId] = [pbd].[FMerchandiseId]
---------------------------------------------------------------------------------- --将采购和销售计算合并
SELECT [detail].[FName], SUM([detail].[总额])
FROM ( SELECT [m].[FName] ,
[m].[FPrice] * [sbd].[FCount] AS '总额'
FROM [dbo].[T_Merchandise] AS [m]
INNER JOIN [dbo].[T_SaleBillDetail] AS [sbd] ON [m].[FId] = [sbd].[FMerchandiseId]
UNION ALL
SELECT [m].[FName] ,
[m].[FPrice] * [pbd].[FCount] * ( -1 ) AS '总额'
FROM [dbo].[T_Merchandise] AS [m]
INNER JOIN [dbo].[T_PurchaseBillDetail] AS [pbd] ON [m].[FId] = [pbd].[FMerchandiseId]
) AS detail
GROUP BY [detail].[FName]
SQL 报表 --简易进销系统的更多相关文章
- SpringBoot终章(整合小型进销系统)
在前面的章节中我们学习Spring的时候可以看到配置文件比较多,所以我们有了SpringBoot 1. 引入依赖 <dependencies> <dependency> < ...
- Access-简易进销存管理系统
p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...
- openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)
原文地址:http://blog.csdn.net/heartrude/article/details/9142463 Openerp开发进销存系统完毕总结 分类: 代码历程 OpenERP 工程思想 ...
- spring boot的一个小项目小型进销存系统
项目所需的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- C# WINFORM进销存系统开发(内涵免费源码+部分实操视频讲解)
互联网的时代,电商火爆,大家都开始进行线上销售货品,那你是如何管理你的商品库存和进销问题?软积木--小敏用的是C# WINFORM进销存系统来管理我的数据,给我带来了很多便利. 它是高频需求项目,很多 ...
- 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统
浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!
- PDA手持机 移动开单进销存系统 现场出打印凭据和扫码 新的亮点
传统车销模式弊端:1.手写开单,效率低,动作慢2.现场手写开单明细不能打印,产品明细不规范3.电脑办公人员及车销人员对车上的库存情况掌握不清楚,销售人员对每种产品销售价格不清楚4.老板对员工工作的管控 ...
- Silverlight管理系统源码(用于开发ERP、OA、CRM、HR、进销存、财务等系统之用)
Silverlight大型管理系统源代码(支持创建ERP.OA.CRM.HR.进销存.财务等系统之用) 可用于开发以下系统 SilverlightERP SilverlightCRM Silverli ...
- [系统开发] FileMaker进销存系统
一.简介 这是我用 FileMaker 编写的进销存系统: FileMaker 是一种在欧美流行的桌面型数据库:它使用非常方便,功能也很强大,用户可以在它上面开发自己的系统: 开发时间:2008年 二 ...
随机推荐
- [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
写在前面 上篇文章简单介绍了项目的结构,这篇文章将实现用户的注册.当然关于漂亮的ui,这在追后再去添加了,先将功能实现.也许代码中有不合适的地方,也只有在之后慢慢去优化了. 系列文章 [EF]vs15 ...
- Saltstack之SSH
salt-minion也可以不安装通过在master安装salt-ssh 1,安装 yum -y install salt-ssh 2,配置salt的花名册 vim /etc/salt/roster ...
- Django的视图与网址之加法计算
在最新的Django2.1中,views.py中采用的地址映射方式发生了变化,通过一个加法运算我们来看一看. 方法一:在视图views.py中定义视图逻辑,求解两个数的加法运算:c = a + b,定 ...
- CodeForces - 617E XOR and Favorite Number 莫队算法
https://vjudge.net/problem/CodeForces-617E 题意,给你n个数ax,m个询问Ly,Ry, 问LR内有几对i,j,使得ai^...^ aj =k. 题解:第一道 ...
- h5直播
直播开发之旅 ① 状态控制: 目前我们先考虑直播的三种状态: 直播前,直播中,结束. 针对每个状态我们肯定会有不同的显示,这三种状态可以是三个页面,相互切换,或者一个页面,控制页面相关隐藏和显示. 可 ...
- django中admin的使用
转载网址:https://www.cnblogs.com/wumingxiaoyao/p/6928297.html Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理 ...
- C#基础笔记(第十天)
C#基础笔记(第十天) 1.字段.属性.方法.构造函数字段:存储数据属性:保护字段,对字段的取值和设值进行限定方法:描述对象的行为构造函数:初始化对象(给对象的每个属性依次的赋值)类中成员,如果不加访 ...
- modelform和modelserializer
modelform modelform比form强悍很多
- kernel下nand flash的文件系统总结
1.FLASH转换层(FTL) EXt2/EXT3/EXT4文件系统可以通过FTL实现对flash的支持,因为FTL可以将闪存flash模拟成磁盘结构. 在ext2文件系统的基础上上,为了保证数据的一 ...
- poj3468A Simple Problem with Integers(线段树的区域更新)
http://poj.org/problem?id=3468 真心觉得这题坑死我了,一直错,怎么改也没戏,最后tjj把q[rt].lz改成了long long 就对了,真心坑啊. 线段树的区域更新. ...