zoukankan      html  css  js  c++  java
  • SQL语句技巧复杂逻辑的SQL简单实现(2)

        前段时间,公司的同事,处理一个业务要求 ,说比较复杂,不想通过语句一个一个机构去递归查询配置信息,如过本机构没有,则去取其上一级机构的配置信息,直到最高层,希望通过一条sql查询出信息:

       

    CREATE TABLE [dbo].[orgunitlink](
        
    [id] [char](32NOT NULL,
        
    [oid] [char](32NULL,
        
    [pid] [char](32NULL,
        
    [col1] [varchar](1000),
        
    [name] varchar(20)
     ) 
    CREATE TABLE [dbo].[selfcustom](
        
    [id] [char](32NOT NULL,
        
    [objid] [char](32NOT NULL,
        
    [config] [varchar](256)NULL,
     ) 

     表和业务要求说明:   

    --表selfcustom 表存放了机构定义的信息,可能存放了等不同机构的配置信息,id为唯一数据,objid存放的是机构id,config为机构定义的信息数据。
    --但一个机构只存放一条信息,但该机构可能是办事处,分公司,片区,总公司
    --表orgunitlink的 字段col1存放了当前机构的全部上级机构,并按级别大小顺序存放,oid为本级机构,pid为上一级机构id。
    --如(总公司,某大区,某分公司)col1存放的id数据格式如下:(02881e70ad1d990010ad1e5ec930008,402881e70ad1d990010ad1e5ec930008,402881e70ad1d990010ad1e5ec930008两个挂号不属于数据内容

    要求:
    前台传入一个机构id,要求查询该机构的配置config信息,
    --如果是本级机构没有,去取上一级的机构,直到最高级机构的配置信息,如果最高级没有,返回没有数据。如果有,只返回一条机构配置信息数据
     

    注意:数据库存放的所有id都是32位字符串

      测试数据:

    insert into [orgunitlink](id,oid,pid,col1,[name]values
    (
    '402882a11bc3ebb9011bc44bba50001a','402881e70ad1d990010ad1e5ec930008',null,null,'总公司')--总公司
    insert into [orgunitlink](id,oid,pid,col1,[name]values
    (
    '402881e70ad1d990010ad1e5ec930008','402882951b449413011b44c99342004c','402881e70ad1d990010ad1e5ec930008',
    '402881e70ad1d990010ad1e5ec930008','华东大区')--华东大区
    insert into [orgunitlink](id,oid,pid,col1,[name]values
    (
    '402882951b449413011b44c99352004d','402881e510e8223c0110e83d427f0018','402882951b449413011b44c99342004c'
    ,
    '402881e70ad1d990010ad1e5ec930008,402882951b449413011b44c99342004c','上海分公司')--上海分公司
    insert into [orgunitlink](id,oid,pid,col1,[name]values
    (
    '4028819e181e984c01181f5874f703f1','402881e510e8223c0110e83d427f0011','402881e510e8223c0110e83d427f0018',
    '402881e70ad1d990010ad1e5ec930008,402882951b449413011b44c99342004c,402881e510e8223c0110e83d427f0018','浦东办事处')--浦东办事处

    insert into [orgunitlink](id,oid,pid,col1,[name]values
    (
    '402882951b449413011b44c99352004d','297e1ba00c0b501f010c0b7254870005','402881e70ad1d990010ad1e5ec930008',
    '402881e70ad1d990010ad1e5ec930008','华北大区')--华北大区
    insert into [orgunitlink](id,oid,pid,col1,[name]values
    (
    '402881e60c85ac00010c866bc5350065','402881e70be6d209010be75668750014','297e1ba00c0b501f010c0b7254870005',
    '402881e70ad1d990010ad1e5ec930008,297e1ba00c0b501f010c0b7254870005','北京分公司')--北京分公司

    insert into [selfcustom](id,objid,config) 
    values('297e828210f211130110f21d99710008','402881e70ad1d990010ad1e5ec930008','总公司配置信息')
    insert into [selfcustom](id,objid,config) 
    values('297e828210f211130110f21d99710009','297e1ba00c0b501f010c0b7254870005','华北大大区配置信息')
    insert into [selfcustom](id,objid,config) 
    values('297e828210f211130110f21d99710010','402881e70be6d209010be75668750014','北京分公司配置信息')

    --传入:表[selfcustom]中的[objid]='402881e510e8223c0110e83d427f0018'为"浦东办事处",
    --
    要求查询出总公司的配置config:"总公司配置信息"

      最后的T_SQL代码:   

    select top 1 config from (
    select  CHARINDEX(c.objid,b.col1)
    /32 rnd, c.config from orgunitlink  b,
    [selfcustom] c 
    where
    b.oid
    ='402881e510e8223c0110e83d427f0018'
    and b.col1 like 
    '%'+c.objid+'%' ) 
    k order by  k.rnd desc
  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/zping/p/1276772.html
Copyright © 2011-2022 走看看