视图的使用及sql语句阅读

发布时间 2023-06-19 10:57:15作者: 小何在编程

视图的使用及sql语句阅读

1、视图

1.1概念

视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

1.2常见应用

  1. 重用SQL语句
  2. 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。
  3. 使用表的一部分而不是整个表。
  4. 保护数据。可以授权用户访问表的特定部分的权限,而不是整个表的访问权限。
  5. 更新数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

需求

在表单添加显示“库存地”一列,在后台修改视图查询与sql查询语句。

descript

修改视图

1.出库视图(修改后)

create or replace view tymi_gk_ck

(stock_code, buy_order_no, dst_mat_code, work_date, dry_wgt)

as

select t.src_stock_code,t.buy_order_no,t.src_mat_code,work_date,sum(t.dry_wgt) from tymirc1 t

where length(t.src_stock_code)>4 group by t.src_stock_code,t.buy_order_no,t.src_mat_code,work_date;

descript

2.入库视图(修改后)

create or replace view tymi_gk_rk

(stock_code, buy_order_no, dst_mat_code, work_date, dry_wgt)

as

select t.dst_stock_code,t.buy_order_no,t.dst_mat_code,work_date,sum(t.dry_wgt) from tymirc1 t

where length(t.dst_stock_code)>4 group by t.dst_stock_code,t.buy_order_no,t.dst_mat_code,work_date;

descript

修改查询语句

SELECT FROM (Select ROWNUM AS ROWNO, A. from

( select qm.STOCK_CODE,qm.BUY_ORDER_NO,qm.DST_MAT_CODE,qm.RB_VALUE,qm.SB_VALUE,qm.QM_VALUE

from ( select a.STOCK_CODE, a.BUY_ORDER_NO, a.DST_MAT_CODE,coalesce(b.RB_VALUE,0) RB_VALUE,coalesce(c.SB_VALUE,0) SB_VALUE, coalesce(b.RB_VALUE,0) - coalesce(c.SB_VALUE,0) QM_VALUE

from( select STOCK_CODE,BUY_ORDER_NO,DST_MAT_CODE from tymi_gk_rk

where (WORK_DATE <='20230614') union select STOCK_CODE,BUY_ORDER_NO, DST_MAT_CODE from tymi_gk_ck where (WORK_DATE <='20230614')

) a

left join (select BUY_ORDER_NO, DST_MAT_CODE, sum(dry_wgt) RB_VALUE from tymi_gk_rk where (WORK_DATE <='20230614') group by BUY_ORDER_NO, DST_MAT_CODE

) b

on a.BUY_ORDER_NO=b.BUY_ORDER_NO and a.DST_MAT_CODE=b.DST_MAT_CODE

left join (select BUY_ORDER_NO, DST_MAT_CODE, sum(dry_wgt) SB_VALUE from tymi_gk_ck where (WORK_DATE <='20230614') group by BUY_ORDER_NO, DST_MAT_CODE

) c

on a.BUY_ORDER_NO=c.BUY_ORDER_NO and a.DST_MAT_CODE=c.DST_MAT_CODE where 1=1

) qm

order by qm.BUY_ORDER_NO,qm.DST_MAT_CODE

) A

WHERE ROWNUM <= 50 )

TABLE_ALIAS WHERE TABLE_ALIAS.ROWNO >= 1

ps:关于很长的SQL查询语句可以根据括号的结合去缩进