2,209
社区成员
发帖
与我相关
我的任务
分享
/*****************************************************************/
/* 下面的例子是 SQLITE 在商业程序中的小例子 */
/* 陈建华 */
/*不能按 F5 一起运行,要一段一段括起来运行,下面的 GO 只是个人习惯.*/
/*************************************************************/
GO
DROP TABLE IF EXISTS BASE_Employee;
GO
/*员工表*/
CREATE TABLE BASE_Employee(
IntEmployeeAuID Int not null, /*员工系统编号*/
VarEmployeeID VarChar(32) not null, /*员工编号*/
VarEmployeeName VarChar(64) not null, /*中文名*/
VarHouseTel VarChar(32) not null, /*家庭电话*/
BitSex smallint not null, /*性别 */
DTEBirthday datetime null, /*出生日期*/
PRIMARY KEY (IntEmployeeAuID))
GO
/*插入测试数据*/
INSERT INTO BASE_Employee VALUES(1,'002001','张三','010-056354',1,'1978-09-23');
INSERT INTO BASE_Employee VALUES(2,'002002','李四','010-325678',1,'1972-04-02');
INSERT INTO BASE_Employee VALUES(3,'002003','老五','010-765879',1,'1971-06-21');
GO
DROP TABLE IF EXISTS BASE_Goods;
GO
/*商品表*/
CREATE TABLE BASE_Goods(
IntGoodsAuID Int not null, /*商品系统编号*/
VarGoodsName VarChar(64) not null, /*商品名称*/
FltPrice Float not null, /*价格*/
PRIMARY KEY (IntGoodsAuID))
GO
/*插入测试数据*/
INSERT INTO BASE_Goods VALUES(1,'金星21寸CTR彩电',1300);
INSERT INTO BASE_Goods VALUES(2,'神舟电脑 A560P-I7 D3',4600);
INSERT INTO BASE_Goods VALUES(3,'红双喜香烟',90);
GO
DROP TABLE IF EXISTS BUS_Order;
GO
/*销售单*/
CREATE TABLE BUS_Order(
VarBillID VarChar(32) not null, /*单号*/
DTEBillDate DateTime not null, /*单据日期*/
IntEmployeeAuID Int not null, /*经手人*/
VarRemark VarChar(255) null, /*备注*/
PRIMARY KEY (VarBillID))
GO
/*插入测试数据*/
INSERT INTO BUS_Order VALUES('PO-201111250001','2011-11-25',1,'');
INSERT INTO BUS_Order VALUES('PO-201111250002','2011-11-25',2,'');
INSERT INTO BUS_Order VALUES('PO-201111250003','2011-11-25',3,'');
INSERT INTO BUS_Order VALUES('PO-201111260001','2011-11-26',1,'');
INSERT INTO BUS_Order VALUES('PO-201111260002','2011-11-26',2,'');
INSERT INTO BUS_Order VALUES('PO-201111260003','2011-11-26',3,'');
INSERT INTO BUS_Order VALUES('PO-201111270001','2011-11-27',1,'');
INSERT INTO BUS_Order VALUES('PO-201111270002','2011-11-27',2,'');
INSERT INTO BUS_Order VALUES('PO-201111270003','2011-11-27',2,'');
GO
DROP TABLE IF EXISTS BUS_OrderItem;
GO
/*销售单明细*/
CREATE TABLE BUS_OrderItem(
VarBillID VarChar(32) not null, /*单号*/
IntGoodsAuID Int not null, /*商品编号*/
FltPrice Float not null, /*单价*/
IntQuantity Int null, /*数量*/
FltTotalMoney Float null, /*金额*/
PRIMARY KEY (VarBillID,IntGoodsAuID))
GO
/*插入测试数据*/
INSERT INTO BUS_OrderItem VALUES('PO-201111250001',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111250001',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111250002',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111250002',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111250003',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111250003',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111260001',1,1300,1,1300);
INSERT INTO BUS_OrderItem VALUES('PO-201111260001',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111260002',3,90,10,900);
INSERT INTO BUS_OrderItem VALUES('PO-201111260002',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111260003',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111260003',3,90,10,900);
INSERT INTO BUS_OrderItem VALUES('PO-201111270001',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111270001',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111270002',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111270002',2,4600,1,4600);
INSERT INTO BUS_OrderItem VALUES('PO-201111270003',1,1300,2,2600);
INSERT INTO BUS_OrderItem VALUES('PO-201111270003',2,4600,1,4600);
GO
/*********************************************************************/
/*********************************************************************/
/*********************************************************************/
/*显示销售单,把员工带出.*/
SELECT T1.*,T2.VarEmployeeName
FROM BUS_Order AS T1 LEFT JOIN BASE_Employee AS T2 ON T1.IntEmployeeAuID=T2.IntEmployeeAuID
/*执行结果.*/
RecNo VarBillID DTEBillDate IntEmployeeAuID VarRemark VarEmployeeName
----- --------------- ----------------------- --------------- --------- ---------------
1 PO-201111250001 2011-11-25 00:00:00.000 1 张三
2 PO-201111250002 2011-11-25 00:00:00.000 2 李四
3 PO-201111250003 2011-11-25 00:00:00.000 3 老五
4 PO-201111260001 2011-11-26 00:00:00.000 1 张三
5 PO-201111260002 2011-11-26 00:00:00.000 2 李四
6 PO-201111260003 2011-11-26 00:00:00.000 3 老五
7 PO-201111270001 2011-11-27 00:00:00.000 1 张三
8 PO-201111270002 2011-11-27 00:00:00.000 2 李四
9 PO-201111270003 2011-11-27 00:00:00.000 2 李四
GO
/*显示明细*/
SELECT T1.*,T2.VarGoodsName
FROM BUS_OrderItem AS T1 LEFT JOIN BASE_Goods AS T2 ON T1.IntGoodsAuID=T2.IntGoodsAuID
GO
/*统计 2011 年销售金额,并按年,月,商品编号 分组显示*/
SELECT GT1.Year
,GT1.Month
,GT1.IntGoodsAuID
,GT2.VarGoodsName
,SUM(GT1.FltTotalMoney) AS FltTotalMoneySUM
FROM (
SELECT
strftime('%Y',T1.DTEBillDate) as Year
,strftime('%m',T1.DTEBillDate) as Month
,T2.IntGoodsAuID
,T2.FltTotalMoney
FROM BUS_Order AS T1 LEFT JOIN BUS_OrderItem AS T2 ON T1.[VarBillID]=T2.VarBillID
WHERE T1.DTEBillDate>='2011-01-01' AND T1.DTEBillDate<'2012-1-1 00:00:00' ) AS GT1
LEFT JOIN BASE_Goods AS GT2 ON GT1.[IntGoodsAuID]=GT2.IntGoodsAuID
GROUP BY GT1.Year,GT1.Month,GT1.IntGoodsAuID,GT2.VarGoodsName;
/*执行结果*/
RecNo GT1.Year GT1.Month GT1.IntGoodsAuID GT2.VarGoodsName FltTotalMoneySUM
----- -------- --------- ---------------- ---------------- ----------------
1 2011 11 1 金星21寸CTR彩电 19500
2 2011 11 2 神舟电脑 A560P-I7 D3 36800
3 2011 11 3 红双喜香烟 1800
GO
/*统计2011年销售金额最高的2款产品*/
SELECT GT1.IntGoodsAuID
,GT2.VarGoodsName
,GT1.FltTotalMoneySUM
FROM (
SELECT T2.IntGoodsAuID
,SUM(T2.FltTotalMoney) AS FltTotalMoneySUM
FROM BUS_Order AS T1 LEFT JOIN BUS_OrderItem AS T2 ON T1.[VarBillID]=T2.VarBillID
WHERE T1.DTEBillDate>='2011-01-01' AND T1.DTEBillDate<'2012-1-1 00:00:00'
GROUP BY T2.IntGoodsAuID
) AS GT1 LEFT JOIN BASE_Goods AS GT2 ON GT1.[IntGoodsAuID]=GT2.IntGoodsAuID
ORDER BY FltTotalMoneySUM DESC LIMIT 0,2;
/*执行结果*/
RecNo IntGoodsAuID VarGoodsName FltTotalMoneySUM
----- ------------ ---------------- ----------------
1 2 神舟电脑 A560P-I7 D3 36800
2 1 金星21寸CTR彩电 19500
GO
/*统计2011年各商品的贡献度*/
SELECT GT1.IntGoodsAuID
,GT2.VarGoodsName
,GT1.FltTotalMoneySUM/(SELECT SUM(TA2.FltTotalMoney) FROM BUS_Order AS Ta1 LEFT JOIN BUS_OrderItem AS Ta2 ON Ta1.[VarBillID]=Ta2.VarBillID WHERE TA1.DTEBillDate>='2011-01-01' AND TA1.DTEBillDate<'2012-1-1 00:00:00') FltProductContribution
FROM (
SELECT T2.IntGoodsAuID
,SUM(T2.FltTotalMoney) AS FltTotalMoneySUM
FROM BUS_Order AS T1 LEFT JOIN BUS_OrderItem AS T2 ON T1.[VarBillID]=T2.VarBillID
WHERE T1.DTEBillDate>='2011-01-01' AND T1.DTEBillDate<'2012-1-1 00:00:00'
GROUP BY T2.IntGoodsAuID
) AS GT1 LEFT JOIN BASE_Goods AS GT2 ON GT1.[IntGoodsAuID]=GT2.IntGoodsAuID
GROUP BY GT1.IntGoodsAuID
ORDER BY FltTotalMoneySUM;
/*执行结果*/
RecNo IntGoodsAuID VarGoodsName FltProductContribution
----- ------------ ---------------- ----------------------
1 3 红双喜香烟 0.0309810671256454
2 1 金星21寸CTR彩电 0.335628227194492
3 2 神舟电脑 A560P-I7 D3 0.633390705679862
GO
-- 用中间表保存结果统计.
DROP TABLE IF EXISTS Tempms;
CREATE TEMP TABLE Tempms(
FltTotalMoneyAll Float NULL
);
INSERT INTO Tempms SELECT SUM(TA2.FltTotalMoney) FROM BUS_Order AS Ta1 LEFT JOIN BUS_OrderItem AS Ta2 ON Ta1.[VarBillID]=Ta2.VarBillID WHERE TA1.DTEBillDate>='2011-01-01' AND TA1.DTEBillDate<'2012-1-1 00:00:00';
SELECT GT1.IntGoodsAuID
,GT2.VarGoodsName
,GT1.FltTotalMoneySUM/( SELECT FltTotalMoneyAll FROM Tempms ) AS FltProductContribution
FROM (
SELECT T2.IntGoodsAuID
,SUM(T2.FltTotalMoney) AS FltTotalMoneySUM
FROM BUS_Order AS T1 LEFT JOIN BUS_OrderItem AS T2 ON T1.[VarBillID]=T2.VarBillID
WHERE T1.DTEBillDate>='2011-01-01' AND T1.DTEBillDate<'2012-1-1 00:00:00'
GROUP BY T2.IntGoodsAuID
) AS GT1 LEFT JOIN BASE_Goods AS GT2 ON GT1.[IntGoodsAuID]=GT2.IntGoodsAuID
GROUP BY GT1.IntGoodsAuID
ORDER BY FltTotalMoneySUM;
DROP TABLE IF EXISTS Tempms;