巧用SQL中的WITH(树型结构数据的查询)
如果表中存放的数据是树形结构,当知道某一个节点的值时,同时想取得它所有子节点的数据。
表结构:
表中存放的是部门组织结构, BMN_CD部门,SSK_KAISO_LV是阶层,BMN_MKJ部门名称,JOI_KAISO_LV上位阶层,JOI_BMN_CD上位部门。
检索SQL :
WITH Moduals (BMN_CD, SSK_KAISO_LV, BMN_MKJ, BMN_NM_RYKS, SKI_FLG, JOI_KAISO_LV, JOI_BMN_CD) AS (SELECT
T130A.BMN_CD,
T130A.SSK_KAISO_LV,
T130A.BMN_MKJ,
TRIM(T130A.BMN_NM_RYKS) BMN_NM_RYKS,
T130A.SKI_FLG,
T130A.JOI_KAISO_LV,
T130A.JOI_BMN_CD
from
T130 T130A
WHERE
T130A.BMN_CD = 'B00011' AND
UNION ALL
SELECT
T130B.BMN_CD,
T130B.SSK_KAISO_LV,
T130B.BMN_MKJ,
TRIM(T130B.BMN_NM_RYKS) BMN_NM_RYKS,
T130B.SKI_FLG,
T130B.JOI_KAISO_LV,
T130B.JOI_BMN_CD
from
T130 T130B
INNER JOIN Moduals T130C
ON T130B.JOI_KAISO_LV = T130C.SSK_KAISO_LV
AND T130B.JOI_BMN_CD = T130C.BMN_CD
)
SELECT Moduals.BMN_CD,SSK_KAISO_LV, BMN_MKJ, BMN_NM_RYKS, SKI_FLG, JOI_KAISO_LV, JOI_BMN_CD from Moduals
【 WHERE ………… 】
如果对检索结果还有限制的话,可以加WHERE语句进行限制。。。。。。。。
检索结果:
相关文档:
所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。
Oracle中动态SQL ......
declare @tablename varchar(20)
select @tablename = 'o_ems'
-------------生成变量,使用表格形式(ctrl + D)输出,取第一个字段的值----------------------------------
select 'private '+
Case when t.name='varchar' Then 'string'
when t.name='char' Then 'string' &nb ......
第一种方法:使用NVL函数处理NULL值。
其语法格式是NVL(exp1,exp2)。其中参数exp1和exp2可以使任意数据的类型,但两者数据类型必须匹配。示例:select ename,sal,comm,sal+nvl(comm,0) as salary from emp;
第二种方法:使用NVL2函数处理NULL值。
其语法格式是NVL2(exp1,exp2,exp3)。这是oracle9i新增加的函数。如果exp1 ......
1 当使用group by时,未在group by 部分用到的表列在s e l e c t部分出现时必须使用分组函数。
select last_name, state_cd, sum(sales) from customer group by last_name;
ERROR at line 1:
ORA-00979: not a GROUP BY expression.
state_cd应该使用分组函数,m a x ( )、m i n ( )、s u m ( )、c o u n t ( )或a v g ......
一、建立链接服务器
有人喜欢调用系统过程来建立,但我个人对系统过程没有特别的学习 ,所以用的是界面设置,当然有兴趣也可以研究一下的,因为可以把SQL执行导出来。
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'TEST2', @srvproduct=N'ORCL', @provider=N ......