`
sunjing21
  • 浏览: 157517 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

视图用法1

 
阅读更多

分析总结

1. 会员积分变化处理(使用4个视图)

会员表:

CREATE TABLE store_member

(

client_name character varying(255), 会员姓名

client_id character varying(255), 会员ID

init_pts bigint, 初始积分

available_pts bigint, 可用积分

total_pts bigint, 总积分

balance double precision, 账上余额

)

会员积分变化表:

CREATE TABLE member_pts_record

(

member_id character varying(50) NOT NULL, 会员ID

business_type character varying(50), 业务类型

record_type integer, 记录类型

total_points integer, 总积分(获得的积分)

used_points integer, 使用积分

)

<1>怎样修改会员的可用积分和总积分

MemberPtsSumupView对应的视图为:

CREATE OR REPLACE VIEW view_class_pts_sumup AS

SELECT p.client_id, p.total_pts, p.available_pts, p.new_total_pts, p.new_vailable_pts

FROM view_temp_pts_sumup_2 p

WHERE p.total_pts <> p.new_total_pts OR p.available_pts <> p.new_vailable_pts;

if (UnitInfoUtil.isThisHeadQuarter())会员积分在总店进行

Session s = m_factory.openSession();

String query = "from MemberPtsSumupView ";

List list = s.createQuery(query).list();

//first update points

if (null != list && list.size() > 0) {

String idList = "(";

Transaction tx = s.beginTransaction();

try {

int total = 0;

for (int i = 0; i < list.size(); i++) {

MemberPtsSumupView info = (MemberPtsSumupView) list.get(i);

idList = idList + "'" + info.getMemberID() + "',";

String update = "update StoreMember"

+ " o set o.availablePoints="

+ info.getNewAvailabePointes()

+ ",o.totalPoints=" + info.getNewTotalPoints()

+ ",o.lastModifyTime=:time "

+ ",o.dataOwner=:owner "

+ " where o.clientID='" + info.getMemberID()

+ "'";

Query cmd = s.createQuery(update);

// update the last update time

cmd.setTimestamp("time", new Timestamp(System

.currentTimeMillis()));

// set dataOwner here

cmd.setString("owner", UnitInfoUtil.getThisUnitCode());

int num = cmd.executeUpdate();

total = total + num;

}

tx.commit();

m_logger

.info("update by MemberPtsSumupView,number updated="

+ total);

} catch (Exception ex) {

tx.rollback();

logException(ex);

}

(统计会员表和会员积分变化表

新的总积分=新总积分+初始化积分

新的可用积分=新的总积分+初始化积分-新的使用积分

)

CREATE OR REPLACE VIEW view_temp_pts_sumup_2 AS

SELECT p.client_id, p.total_pts, p.init_pts, p.available_pts, p.new_total_pts + p.init_pts AS new_total_pts, p.new_total_pts + p.init_pts - p.new_used_pts AS new_vailable_pts

FROM view_temp_pts_sumup p;

CREATE OR REPLACE VIEW view_temp_pts_sumup AS

SELECT o.client_id, o.total_pts, o.init_pts, o.available_pts,

CASE

WHEN p.new_total_pts IS NULL THEN 0::bigint

ELSE p.new_total_pts

END AS new_total_pts,

CASE

WHEN p.new_used_pts IS NULL THEN 0::bigint

ELSE p.new_used_pts

END AS new_used_pts

FROM store_member o

LEFT JOIN view_temp_pts_groupby p ON p.member_id::text = o.client_id::text;

(

计算 会员积分变化表

<1>统计会员的使用积分作为新的使用积分

<2>统计会员的总积分(会员获取的积分)做为新的总积分(总的会员获取积分)

)

CREATE OR REPLACE VIEW view_temp_pts_groupby AS

SELECT p.member_id ,sum(p.used_points) AS new_used_pts, sum(p.total_points) AS new_total_pts

FROM member_pts_record p

GROUP BY p.member_id;

2/会员的储值卡平衡(使用3个视图)

会员储值卡变化表

CREATE TABLE account_change_table

(

refer_order_number character varying(50), 引用的订单

business_type character varying(50), 业务类型

action_type character varying(50), 变化类型

member_id character varying(50), 会员ID

change_amount double precision, 变化量

)

if (UnitInfoUtil.isThisHeadQuarter()) {

Session s = m_factory.openSession();

Transaction tx = s.beginTransaction();

try {

String query = "from AccountChangeRecordView ";

List members = s.createQuery(query).list();

if (null != members && members.size() > 0) {

for (int i = 0; i < members.size(); i++) {

AccountChangeRecordView view = (AccountChangeRecordView) members

.get(i);

String memberQuery = "from StoreMember o where o.clientID='"

+ view.getMemberID() + "'";

List list = s.createQuery(memberQuery).list();

StoreMember member = (StoreMember) list.get(0);

member.setBalance(view.getRealBalance());

Timestamp modifyTime = new Timestamp(System

.currentTimeMillis());

member.setLastModifyTime(modifyTime);

// set data owner

member.setDataOwner(UnitInfoUtil.getThisUnitCode());

// increase copy version.

member.increaseCopyVersion();

s.saveOrUpdate(member);

}

}

tx.commit();

if (null != members && members.size() > 0) {

m_logger

.info("update by AccountChangeRecordView,number updated="

+ members.size());

}

} catch (Exception ex) {

tx.rollback();

logException(ex);

}

s.close();

}

AccountChangeRecordView对应的视图:

CREATE OR REPLACE VIEW view_class_member_balance_checker AS

SELECT p.member_id, p.balance, p.real_balance

FROM view_temp_member_balance_checker_2 p

WHERE abs(p.balance - p.real_balance) > 0.1::double precision;

CREATE OR REPLACE VIEW view_temp_member_balance_checker_2 AS

SELECT p.client_id AS member_id,

CASE

WHEN p.balance IS NULL THEN 0::double precision

ELSE p.balance

END AS balance,

CASE

WHEN k.real_balance IS NULL THEN 0::double precision

ELSE k.real_balance

END AS real_balance

FROM store_member p

LEFT JOIN view_temp_member_balance_checker_1 k ON k.member_id::text = p.client_id::text;

CREATE OR REPLACE VIEW view_temp_member_balance_checker_1 AS

SELECT p.member_id, sum(p.change_amount) AS real_balance

FROM account_change_table p

GROUP BY p.member_id;

会员积分变化和会员储值变化总结:都是采用原始记录表加变化记录表处理。视图的创建基本规则是:

<1>查询 变化记录的 视图

<2>查询 原始记录和变化记录视图的 视图

<3>计算原始记录和变化记录视图的 视图的 视图

<4>筛选符合规则的记录的视图

3处理供应商

-- Table: product_supplier

-- DROP TABLE product_supplier;

CREATE TABLE product_supplier

(

client_name character varying(255),

client_id character varying(255),

credit_amount double precision,

init_bal double precision,

current_bal double precision,

business_amount double precision,

paid double precision,

uppaid double precision,

)

// 5. handle product supplier

if (UnitInfoUtil.isThisHeadQuarter()) {

Session s = m_factory.openSession();

String query = "from ProductSupplierView ";

List list = s.createQuery(query).list();

if (null != list && list.size() > 0) {

Transaction tx = s.beginTransaction();

try {

int total = 0;

for (int i = 0; i < list.size(); i++) {

ProductSupplierView info = (ProductSupplierView) list

.get(i);

Double unpaid = new Double(info.getBusinessAmountReal()

.doubleValue()

- info.getReturnAmountReal().doubleValue());

String update = "update ProductSupplier"

+ " o set o.businessAmount="

+ info.getBusinessAmountReal() + ",o.paid="

+ info.getReturnAmountReal() + ",o.unpaid="

+ unpaid + ",o.currentBal=" + info.getBalReal()

+ ",o.lastModifyTime=:time "

+ ",o.dataOwner=:owner "

+ " where o.clientName='"

+ info.getClientName() + "'";

Query cmd = s.createQuery(update);

// set dataOwner here

cmd.setString("owner", UnitInfoUtil.getThisUnitCode());

// update the last update time

cmd.setTimestamp("time", new Timestamp(System

.currentTimeMillis()));

int num = cmd.executeUpdate();

total = total + num;

}

tx.commit();

m_logger

.info("update by ProductSupplierView,number updated="

+ total);

} catch (Exception ex) {

tx.rollback();

logException(ex);

}

}

s.close();

}

ProductSupplierView对应的视图:

CREATE OR REPLACE VIEW view_class_supplier_sumup AS

SELECT p.client_name, p.business_amount, p.in_amount, p.paid, p.out_amount, p.current_bal, p.real_bal

FROM view_temp_supplier_sumup_2 p

WHERE abs(p.business_amount - p.in_amount) > 0.1::double precision OR abs(p.paid - p.out_amount) > 0.1::double precision OR abs(p.current_bal - p.real_bal) > 0.1::double precision;

CREATE OR REPLACE VIEW view_temp_supplier_sumup_2 AS

SELECT p.client_name, p.business_amount, p.in_amount, p.paid, p.out_amount, p.current_bal, p.init_bal + p.in_amount - p.out_amount + p.out_recieve - p.in_payment AS real_bal

FROM view_temp_supplier_sumup p;

CREATE OR REPLACE VIEW view_temp_supplier_sumup AS

SELECT o.client_name,

CASE

WHEN o.business_amount IS NULL THEN 0::double precision

ELSE o.business_amount

END AS business_amount,

CASE

WHEN o.paid IS NULL THEN 0::double precision

ELSE o.paid

END AS paid,

CASE

WHEN o.init_bal IS NULL THEN 0::double precision

ELSE o.init_bal

END AS init_bal,

CASE

WHEN o.current_bal IS NULL THEN 0::double precision

ELSE o.current_bal

END AS current_bal,

CASE

WHEN a.in_amount IS NULL THEN 0::double precision

ELSE a.in_amount

END AS in_amount,

CASE

WHEN b.out_amount IS NULL THEN 0::double precision

ELSE b.out_amount

END AS out_amount,

CASE

WHEN c.in_payment IS NULL THEN 0::double precision

ELSE c.in_payment

END AS in_payment,

CASE

WHEN d.out_recieve IS NULL THEN 0::double precision

ELSE d.out_recieve

END AS out_recieve

FROM product_supplier o

LEFT JOIN view_temp_inbound_sumup a ON a.parter_name::text = o.client_name::text

LEFT JOIN view_temp_outbound_sumup b ON b.parter_name::text = o.client_name::text

LEFT JOIN view_temp_inbound_payment_sumup c ON c.parter_name::text = o.client_name::text

LEFT JOIN view_temp_outbound_recieve_sumup d ON d.parter_name::text = o.client_name::text;

CREATE OR REPLACE VIEW view_temp_inbound_sumup AS

SELECT o.parter_name, sum(o.amount) AS in_quantity, sum(o.sub_total) AS in_amount

FROM inbound_order_item o

WHERE o.status::text = 'normal'::text

GROUP BY o.parter_name;

总结:基本思想同会员处理积分变化一样.

<1>统计各个订单变化总和。

<2>合并 供应商信息 各个订单变化总和

<3>计算合并的

<4>安条件计算出满足条件的视图.

4处理客户信息同供应商处理一样。

5.处理订单支付信息

view_class_payment_info

CREATE OR REPLACE VIEW view_class_payment_info AS

SELECT p.order_number, p.class_name, p.busiess_type, p.amount, p.paid, p.paid_real

FROM view_temp_payment_info p

WHERE p.paid <> p.paid_real OR p.paid IS NULL AND p.paid_real IS NOT NULL OR p.paid_real IS NULL AND p.paid IS NOT NULL;

CREATE OR REPLACE VIEW view_temp_payment_info AS

SELECT a.order_number, a.class_name, a.busiess_type, a.amount, a.paid, b.paid_real

FROM viewpayquery_temp_payable_detail a

LEFT JOIN viewpayquery_temp_paid_detail b ON b.refer_order_number::text = a.order_number::text;

CREATE OR REPLACE VIEW viewpayquery_temp_payable_detail AS

(( SELECT a.order_number, a.busiess_type, 'InboundOrder' AS class_name, a.amount, a.paid

FROM inbound_order a

WHERE a.status::text = 'normal'::text

UNION ALL

SELECT a.order_number, a.busiess_type, 'WholesaleOrderReturn' AS class_name, a.amount, a.paid

FROM wholesale_order_return a

WHERE a.status::text = 'normal'::text)

UNION ALL

SELECT a.order_number, a.busiess_type, 'OutboundOrder' AS class_name, a.amount, a.paid

FROM outbound_order a

WHERE a.status::text = 'normal'::text)

UNION ALL

SELECT a.order_number, a.busiess_type, 'WholesaleOrder' AS class_name, a.amount, a.paid

FROM wholesale_order a

WHERE a.status::text = 'normal'::text;

CREATE OR REPLACE VIEW viewpayquery_temp_paid_detail AS

(( SELECT a.refer_order_number, sum(a.payment) AS paid_real

FROM inbound_payment_item a

WHERE a.status::text = 'normal'::text

GROUP BY a.refer_order_number

UNION ALL

SELECT a.refer_order_number, sum(a.payment) AS paid_real

FROM wholesale_return_payment_item a

WHERE a.status::text = 'normal'::text

GROUP BY a.refer_order_number)

UNION ALL

SELECT a.refer_order_number, sum(a.payment) AS paid_real

FROM outbound_recieve_item a

WHERE a.status::text = 'normal'::text

GROUP BY a.refer_order_number)

UNION ALL

SELECT a.refer_order_number, sum(a.payment) AS paid_real

FROM wholesale_recieve_item a

WHERE a.status::text = 'normal'::text

GROUP BY a.refer_order_number;

分享到:
评论

相关推荐

    自己总结的数据库oracle视图用法

    自己总结的数据库oracle视图用法自己总结的数据库oracle视图用法

    数据库实验报告视图的使用

    通过视图的创建过程,理解视图的概念和意义,掌握视图的基本使用方法。 2. 实验要求 通过视图的设计和定义,掌握建立视图的基本方法,包括通过单张表建立视图和通过多张表建立视图,通过在定义的视图上进行查询,...

    c#使用列表视图控件例子

    里面详细介绍了c#使用列表视图控件例子。

    实验四 视图、数据控制

    1、掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言查询语句的理解。 2、掌握用查询分析器和视图创建向导的方法创建视图。 3、学会使用SQL数据控制语句来进行授权控制和权限回收。 4、了解高级...

    angular4强制刷新视图的方法

    使用angular的过程中有时会出现数据已经更新了,但是对于的视图没有更新,针对这一情况,可以是用angular提供的方法强制更新视图。 这里使用NGZone来更新视图 import {NgZone} from '@angular/core'; constructor...

    数据库实验报告 视图的定义及使用实验(详细版有截图的)

    实验三(1)视图的定义及使用实验 一、实验目的 使学生掌握 SQL Server中的视图创建及删除的方法,加深对视图和SQL Server图表作用的理解。 本实验需要1学时。 二、实验内容 1. 启动数据库服务软件SQL Server 2000的...

    树视图与列表视图

    详细的介绍mfc树视图与列表视图的创建与用法,方便初学者学习

    数据库视图的详细用法讲解

    视图的详细讲解 过程很详细 及时帮助掌握视图的相关用法

    MySQL数据库:使用NAVICAT工具创建和管理视图.pptx

    使用NAVICAT工具创建和管理视图 数据视图 课程目标 掌握 —— 通过NAVICAT创建视图的方法; 掌握 —— 通过NAVICAT修改视图的方法; 掌握 —— 通过NAVICAT删除视图的方法。 使用NAVICAT工具创建和管理视图 小结 ...

    数据库:掌握视图的创建方法

    :一、使用命令创建视图并对视图进行查询、修改、删除等操作;二、用命令的方法创建索引,以及进行重命名和删除操作;三、建立完整性约束,并对其进行相应操作;四、创建存储过程,并对其进行查看,

    软件架构_4+1_视图模型-中文版

    本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型。...本文分别对五种视图进行了描述,并同时给出了捕获每种视图的表示方法。这些视图使用以架构为中心的、场景驱动以及迭代开发过程来进行设计。

    TIA PORTAL wincc中配方recipe组态及配方视图的使用方法.docx

    TIA PORTAL wincc中配方recipe组态及配方视图的使用方法

    实验六-视图的定义及查询

    ① 在“图书读者数据库”(Book_Reader_DB)中,先用视图创建向导的方法创建视图View1和View2。其中View1包括书号、书名、定价、数量等属性。View2包括读者号、读者姓名、单位、电话、书号、书名、借阅日期、应归还...

    MySQL数据库:数据视图的修改和删除.pptx

    视图的修改和删除 数据视图 课程目标 理解 —— 修改视图定义的语法; 掌握 ——修改视图的方法; 掌握 —— 删除视图的方法。 视图的修改和删除 修改视图 视图被创建之后,由于某种原因(如基本表中的列发生...视图名1

    数据库原理实验3-数据更新及视图(实验报告含总结体会)

    (1) 掌握SQL数据更新语句的基本使用方法,如UPDATE、DELETE、INSERT。 (2) 掌握更新语句条件中的嵌套查询使用方法。 (3) 掌握SQL视图语句的基本使用方法,如CREATE VIEW、DROP VIEW。 (4) 掌握视图更新、...

    MySQL数据库:创建视图.pptx

    掌握—— 创建视图的方法; 掌握 —— 查看视图的方法。 创建视图 使用CREATE VIEW语句创建视图 语法格式: CREATE [OR REPLACE] VIEW 视图名 [(列名列表)] AS select语句 [WITH CHECK OPTION] 列名列表:要想为视图...

    SQLQuery1实验五-视图.sql

    (1)掌握SQL视图语句的基本使用方法,如CREATE VIEW、DROP VIEW。 (2)掌握视图更新、WITH CHECK OPTION等高级功能的使用。 2实验内容 2.1掌握SQL视图语句的基本使用方法 (1)创建视图(省略视图列名)。 (2)...

    Oracle的V$性能视图学习大全

    比较详细的介绍了Oracle的V$性能视图的使用方法及技巧。 摘要:高级DBA经常告诉刚刚入行的DBA,在Oracle 6年代,他们曾经将每一张V$视图烂熟于心。在Oracle 6中,仅仅只有23个V$视图,那时侯的DBA可以很轻松地使用...

    实验四视图、数据控制与嵌入式SQL语言实验

    ① 在“图书读者数据库”(Book_Reader_DB)中,先用视图创建向导的方法创建视图View1和View2。其中View1包括书号、书名、定价、数量等属性。View2包括读者号、读者姓名、单位、电话、书号、书名、借阅日期、应归还...

    oracle视图详解

    讲述oracle中视图的用法。视图定义、视图作用、视图语法、视图操作等等。

Global site tag (gtag.js) - Google Analytics