A. 怎么用sql商品库存明细表
示例如下:
--明细帐数据
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --产品编号
Quantity int, --交易数量
Flag bit, --交易标志,1代表入库,0代表出库,这样可以有效区分退货(负数)
Date datetime) --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--查询时间段定义
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--查询
--统计时间段内无发生额的数据(如果这个不是查询需要的,去掉这段查询)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定时间段内有交易发生的数据
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--结果
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
望楼主采纳
沈阳金蝶财务为您解答
B. sql中如何查询出一批订单明细但是明细的总和等于指定的值
查询order表,根据order_id分组累计统计order_price的值,与此同事根据ctime排序来累计统计。得到从第一行到当前行的order_price的加和。然后得到累计和是5000的数据行,然后从这个数据行中获取ctime;然后从order表中查询数据条件是ctime<=获取到的ctime的值。此时得到的结果集合中,所有的行的order_price的加和就是5000。
select * from order where ctime<=
select ctime from (
select *, sum(order_price) over(partiton by order_id order by ctime asc) as sum_price
) as x where x.sum_price = 5000
C. 怎么用sql商品库存明细表
示例如下:
--明细帐数据
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --产品编号
Quantity int, --交易数量
Flag bit, --交易标志,1代表入库,0代表出库,这样可以有效区分退货(负数)
Date datetime) --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--查询时间段定义
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--查询
--统计时间段内无发生额的数据(如果这个不是查询需要的,去掉这段查询)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定时间段内有交易发生的数据
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--结果
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
--*/
D. 用SQL语句写出库存交易明细帐类型的报表,该如何书写呈现下面的显示形式
select MX001,decode(MX003,'1','入库','出库') rck,Mx002,MX004 ,
sum(decode(mx003,'1',mx002,0)-decode(mx003,'-1',mx002,0)) over(order by mx001,mx004) aa
from JYMX t
E. 怎么用sql商品库存明细表
入库有 采购入库单(Pur),其他入库(QP),调拨入库单(DP)
出库有 销售出库单(Sa),其他出库单(QS),调拨出库单(DS)
还有一张库存初始化单据(CSH)
这几张表 根据物料ID(MaterialID),仓库ID(FWarehouseID)进行联合,实现先进先出法,调拨单只是修改相应单据的数量(采购入库单或库存初始化单
F. sql语句查询某字段的数据总和,并列出表中的所有记录。
1、首先,创建一个测试表,相关代码如下,进入下一步。
G. sql中怎么求一个表的明细固定列
通过SSMS添加、修改或删除,也可以通过系统视图查询。
表或表字段等的注释,是数据库对象的扩展属性。在MSSQL中,支持把一些注释性的内容放到数据库或数据库对象中,增强可读性,有助于日后的管理和维护工作。扩展属性的内容可以通过SSMS添加、修改或删除,也可以通过系统视图查询,通过执行相关的存储过程来维护。
在数据库应用开发中,我们经常需要面对复杂的SQL式计算,固定分组就是其中一种。固定分组的分组依据不在待分组的数据中,而是来自于外部,比如另一张表、外部参数、条件列表等。对于特定类型的固定分组,用SQL实现还算简单(比如:分组依据来自另一张表,且对分组次序没有要求),但对于比较通用、灵活的要求,实现起来就困难了。
H. 怎么用sql商品库存明细表
--明细帐数据
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --产品编号
Quantity int, --交易数量
Flag bit, --交易标志,1代表入库,0代表出库,这样可以有效区分退货(负数)
Date datetime) --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--查询时间段定义
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--查询
--统计时间段内无发生额的数据(如果这个不是查询需要的,去掉这段查询)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定时间段内有交易发生的数据
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--结果
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
--*/
itjob祝你成功
I. 怎么用sql商品库存明细表
示例如下: --明细帐数据 CREATE TABLE tb( ID int IDENTITY PRIMARY KEY, Item varchar(10), --产品编号 Quantity int, --交易数量 Flag bit, --交易标志,1代表入库,0代表出库,这样可以有效区分退货(负数) Date datetime)
J. SQL指令如何查询数据表中最新版本号对应的明细内容
一、数据准备
以Microsoft SQL Server数据库管理系统为例。
假设对应的数据表名称为TestTable,表结构如下所示:
CREATETABLETestTable
(
[品牌] VARCHAR(20),
[版本号] INT,
[颜色] VARCHAR(10)
)
添加样例数据的SQL代码如下:
INSERTINTOTestTableVALUES('三星',1,'黑')
INSERTINTOTestTableVALUES('三星',1,'白')
INSERTINTOTestTableVALUES('三星',1,'灰')
INSERTINTOTestTableVALUES('三星',1,'蓝')
INSERTINTOTestTableVALUES('三星',1,'红')
INSERTINTOTestTableVALUES('苹果',1,'黑')
INSERTINTOTestTableVALUES('苹果',1,'白')
INSERTINTOTestTableVALUES('HTC',1,'黑')
INSERTINTOTestTableVALUES('HTC',1,'白')
INSERTINTOTestTableVALUES('HTC',1,'灰')
INSERTINTOTestTableVALUES('HTC',1,'蓝')
INSERTINTOTestTableVALUES('HTC',1,'红')
INSERTINTOTestTableVALUES('三星',2,'黑')
INSERTINTOTestTableVALUES('三星',2,'白')
INSERTINTOTestTableVALUES('HTC',2,'黑')
INSERTINTOTestTableVALUES('HTC',2,'白')
INSERTINTOTestTableVALUES('HTC',3,'黑')
INSERTINTOTestTableVALUES('HTC',3,'白')
INSERTINTOTestTableVALUES('HTC',3,'灰')
INSERTINTOTestTableVALUES('HTC',3,'蓝')
INSERTINTOTestTableVALUES('HTC',3,'红')
二、思路
查询所有数据行,对结果集按“品牌”分组,比较分组后的每行的版本号是否是同一品牌的最新版本号,若不是则从结果集中剔除。
GROUPBY分组列
HAVING分组后的条件子句
三、实现步骤
完整的SQL代码如下:
SELECT t1.[品牌],t1.[版本号],t1.[颜色]
FROM TestTablet1
GROUPBY t1.[品牌],t1.[版本号],t1.[颜色]
HAVING t1.[版本号]=( SELECT MAX(t2.[版本号])
FROM TestTablet2
WHERE t1.[品牌]=t2.[品牌])
四、运行测试
运行结果:
品牌版本号颜色
-----------------------------------------
苹果1白
苹果1黑
三星2白
三星2黑
HTC3白
HTC3黑
HTC3红
HTC3灰
HTC3蓝
(9行受影响)