利用SQL语句计算库存
2007-01-06 18:34
423 查看
计算库存量:
SELECT TOP 100 PERCENT dbo.Office_In.InCode, dbo.Office_In.InDate,
dbo.Office_In.ComCode, dbo.Office_In.TypeCode, dbo.Office_In.OName,
dbo.Office_In.Spec, dbo.Office_In.Unit, dbo.Office_In.Qty, dbo.Office_In.Price,
dbo.Office_In.Provider, dbo.Office_In.Master, dbo.Office_In.Note,
dbo.Company.ComName, dbo.Office_Type.TypeName, dbo.Office_In.Qty -
(SELECT isnull(SUM(Office_Out.Qty), 0)
FROM Office_Out
WHERE Office_In.InCode = Office_Out.InCode) AS Stock,
(SELECT isnull(SUM(office_out.qty), 0)
FROM office_out
WHERE office_in.inCode = office_out.incode) AS outQty
FROM dbo.Office_Type INNER JOIN
dbo.Office_In ON
dbo.Office_Type.TypeCode = dbo.Office_In.TypeCode LEFT OUTER JOIN
dbo.Company ON dbo.Office_In.ComCode = dbo.Company.ComCode
ORDER BY dbo.Company.ComName, dbo.Office_Type.TypeName
在这个SQL语句,主要是利用isnull函数,将从数据库中查询到的为null的值,转化为0,之后利用减法,将库存计算出来。
附:结构表
/**//****** 对象:表 dbo.Office_In ******/
/**//****** 说明:办公用品入库表 ******/
If Exists (Select * From sysobjects where id = object_id('dbo.Office_In'))
Drop Table dbo.Office_In
GO
Create Table Office_In(
InCode varchar(12) Not Null Primary key,--入库编号
InDate smalldatetime Not Null, --入库日期
ComCode varchar(4) Not Null, --公司单位代码
TypeCode varchar(4) Not Null, --种类代码
OName varchar(50) Not Null, --办公用品名称
Spec varchar(50) Null, --规格
Unit varchar(10) Null, --单位
Qty Int Not Null, --数量
Price Numeric(8,2) Not Null, --单价
Provider varchar(50) Null, --购买单位
Master varchar(20) Not Null, --经办人
Note Varchar(100) Null --备注
)
GO
ALTER TABLE dbo.Office_In ADD
CONSTRAINT FK_Office_In_ComPany FOREIGN KEY
(
ComCode
) REFERENCES dbo.Company (
ComCode
),
CONSTRAINT FK_Office_In_Type FOREIGN KEY
(
TypeCode
) REFERENCES dbo.Office_Type (
TypeCode
)
GO
/**//****** 对象:表 dbo.Office_Out ******/
/**//****** 说明:办公用品领用表 ******/
If Exists (Select * From sysobjects where id = object_id('dbo.Office_Out'))
Drop Table dbo.Office_Out
GO
Create Table Office_Out(
OutCode varchar(12) Not Null Primary key,--领用编号
ComCode varchar(4) Not Null, --公司单位代码
InCode varchar(12) Not Null, --入库编号
OutDate smallDatetime Not NUll, --领用日期
Qty Int Not Null, --数量
Master varchar(20) Not Null, --经办人
Note Varchar(100) Null --备注
)
GO
ALTER TABLE dbo.Office_Out ADD
CONSTRAINT FK_Office_Out_ComPany FOREIGN KEY
(
ComCode
) REFERENCES dbo.Company (
ComCode
),
CONSTRAINT FK_Office_Out_In FOREIGN KEY
(
InCode
) REFERENCES dbo.Office_In (
InCode
)
GO
SELECT TOP 100 PERCENT dbo.Office_In.InCode, dbo.Office_In.InDate,
dbo.Office_In.ComCode, dbo.Office_In.TypeCode, dbo.Office_In.OName,
dbo.Office_In.Spec, dbo.Office_In.Unit, dbo.Office_In.Qty, dbo.Office_In.Price,
dbo.Office_In.Provider, dbo.Office_In.Master, dbo.Office_In.Note,
dbo.Company.ComName, dbo.Office_Type.TypeName, dbo.Office_In.Qty -
(SELECT isnull(SUM(Office_Out.Qty), 0)
FROM Office_Out
WHERE Office_In.InCode = Office_Out.InCode) AS Stock,
(SELECT isnull(SUM(office_out.qty), 0)
FROM office_out
WHERE office_in.inCode = office_out.incode) AS outQty
FROM dbo.Office_Type INNER JOIN
dbo.Office_In ON
dbo.Office_Type.TypeCode = dbo.Office_In.TypeCode LEFT OUTER JOIN
dbo.Company ON dbo.Office_In.ComCode = dbo.Company.ComCode
ORDER BY dbo.Company.ComName, dbo.Office_Type.TypeName
在这个SQL语句,主要是利用isnull函数,将从数据库中查询到的为null的值,转化为0,之后利用减法,将库存计算出来。
附:结构表
/**//****** 对象:表 dbo.Office_In ******/
/**//****** 说明:办公用品入库表 ******/
If Exists (Select * From sysobjects where id = object_id('dbo.Office_In'))
Drop Table dbo.Office_In
GO
Create Table Office_In(
InCode varchar(12) Not Null Primary key,--入库编号
InDate smalldatetime Not Null, --入库日期
ComCode varchar(4) Not Null, --公司单位代码
TypeCode varchar(4) Not Null, --种类代码
OName varchar(50) Not Null, --办公用品名称
Spec varchar(50) Null, --规格
Unit varchar(10) Null, --单位
Qty Int Not Null, --数量
Price Numeric(8,2) Not Null, --单价
Provider varchar(50) Null, --购买单位
Master varchar(20) Not Null, --经办人
Note Varchar(100) Null --备注
)
GO
ALTER TABLE dbo.Office_In ADD
CONSTRAINT FK_Office_In_ComPany FOREIGN KEY
(
ComCode
) REFERENCES dbo.Company (
ComCode
),
CONSTRAINT FK_Office_In_Type FOREIGN KEY
(
TypeCode
) REFERENCES dbo.Office_Type (
TypeCode
)
GO
/**//****** 对象:表 dbo.Office_Out ******/
/**//****** 说明:办公用品领用表 ******/
If Exists (Select * From sysobjects where id = object_id('dbo.Office_Out'))
Drop Table dbo.Office_Out
GO
Create Table Office_Out(
OutCode varchar(12) Not Null Primary key,--领用编号
ComCode varchar(4) Not Null, --公司单位代码
InCode varchar(12) Not Null, --入库编号
OutDate smallDatetime Not NUll, --领用日期
Qty Int Not Null, --数量
Master varchar(20) Not Null, --经办人
Note Varchar(100) Null --备注
)
GO
ALTER TABLE dbo.Office_Out ADD
CONSTRAINT FK_Office_Out_ComPany FOREIGN KEY
(
ComCode
) REFERENCES dbo.Company (
ComCode
),
CONSTRAINT FK_Office_Out_In FOREIGN KEY
(
InCode
) REFERENCES dbo.Office_In (
InCode
)
GO
相关文章推荐
- 利用存储过程将SQL Server中的记录导出成SQl语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- 利用Attribute特性简化多查询条件拼接sql语句的麻烦
- 利用SQL语句对不同数据库进行高效果分页
- 利用 force index优化sql语句性能
- 利用反射动态生成sql语句
- SQL 关于如何利用聚合函数把nvarchar型转成int型进行统计计算的方法
- SQL 语句优化—— (二) 索引的利用
- 计算sql语句的时间
- 利用反射拼接sql语句
- 利用pl/sql执行计划评估SQL语句的性能简析
- 利用T—SQL语句添加约束
- sqlserver利用存储过程去除重复行的sql语句
- 关于计算的SQL语句(Oracle)
- mysql每半小时平均值计算的sql语句
- SQL优化技术分析-3:SQL语句索引的利用
- SQL中本地电脑中两个库存移动表语句
- 利用SQL语句查询数据库中所有表
- 利用Command创建执行SQL语句的模块
- SQL语句练习-计算字段