按日统计销售情况例子(每天的期末值是下一天的期初值)重要

原创 2011年01月12日 11:28:00

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
--select * from TB

--查询时间段定义
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

 

相关文章推荐

商店销售统计,每天有一个折扣价格,一次购10件以上者可以享受9.8折优惠,已知三个销售员的销售情况,运用静态数据成员和静态成员函数编写程序

#include #include using namespace std; class Product { public: Product(int m,int q,float p):...

sap-abap-销售订单的订货,生产,存货,发货情况统计报表

这里是在另一台oracle服务器连接 sap 的数据库写的视图,zsdvbap_ex 是个自定义表,保存了订单行的文本及可配置物料的特性值,其它均为 sap 标准表. create ...

输入某年某月某日,判断这一天是这一年的第几天?考虑闰年的情况

输入某年某月某日,判断这一天是这一年的第几天?考虑闰年的情况 import java.util.Scanner; /** *输入某年某月某日,判断这一天是这一年的第几天?考虑闰年的情况 *...

利用cppunit框架进行单元测试的例子,结合gcov,lcov实现对测试覆盖情况的统计

下面是一个利用cppunit框架进行单元测试的例子,结合gcov,lcov实现对     测试覆盖情况的统计 测试部分 由两部分组成:testfixture, main ;用两种颜色分开以示区别。...

定义二维数组,为数组赋初值、输入值、更改值、按各种方法输出

/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: array.c...

销售人员要做的最重要的事

很多人错误的以为公司商品才是最重要的,其实第一线人员才是真正顾客接触的第一样商品,也是让公司产品能够具有灵魂的关键,因此能不能让顾客停下脚来了解一下、能不能掌握多一次的机会在顾客心中创建品牌形象、能不...

19、Power Query-快速分析各产品的销售情况

本节知识点:Power Query反转行的妙用(路径:“转换”——“反转行”) 何谓反转行,即将行内容反过来,有别于“排序”。 例如 : 下面直接通过一个实用的例子来说明:《快速分析各产品的销售...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:按日统计销售情况例子(每天的期末值是下一天的期初值)重要
举报原因:
原因补充:

(最多只允许输入30个字)