| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 941 人关注过本帖
标题:求助高手:编写一个SQL Server查询语句
只看楼主 加入收藏
scamper312
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-10-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
求助高手:编写一个SQL Server查询语句
实际物理表:

单位编码         单位名称           父级单位
DW0100           广东电力
DW0200           北京电力
DW0201           朝阳电力           DW0200
DW020101         朝阳一部           DW0201
DW020102         朝阳二部           DW0201
DW0202           西城电力           DW0200
DW0203           东城电力           DW0200


执行一条查询SQL,生成结果集如下:

单位编码         单位名称         父级单位         父子级别
DW0100           广东电力                          1
DW0200           北京电力                          1
DW0201           朝阳电力         DW0200           2
DW020101         朝阳一部         DW0201           3
DW020102         朝阳二部         DW0201           3
DW0202           西城电力         DW0200           2
DW0203           东城电力         DW0200           2

哪位大侠帮忙写出这么一条查询SQL,感激不尽!!
搜索更多相关主题的帖子: SQL Server 语句 编写 
2010-10-09 18:03
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:5 
不知道是不是这样的.
程序代码:
use master
drop table temp
create table temp(
    id int not null primary key identity(1,1),
    code varchar(20) not null,
    name varchar(20) null,
    parent varchar(20) not null
)
insert into temp values ('DW0100','广东电力','')
insert into temp values ('DW0200','北京电力','')
insert into temp values ('DW0201','朝阳电力','DW0200')
insert into temp values ('DW020101','朝阳一部','DW0201')
insert into temp values ('DW020102','朝阳二部','DW0201')
insert into temp values ('DW0202','西城电力','DW0200')
insert into temp values ('DW0203','东城电力','DW0200')
select code,name,parent,level=case when convert(int,substring(code,len(code),len(code)))>0 AND len(code)=6 then '2' 
                                   when len(code)>6 then '3' else '1' end
from temp

C#超级群 74862681,欢迎大家的到来!
2010-10-09 23:39
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
《SQL语言艺术》一书中有!

★★★★★为人民服务★★★★★
2010-10-10 07:12
scamper312
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-10-9
收藏
得分:0 
补充一点:单位编码是没有固定规则结构的,有可能是随意的一个字符串标识,因此不能根据单位编码的长度计算其相应的级别。只能根据单位编码和父级单位的引用关系进行计算,可能需要用到递归计算。在oracle中可以使用start with语法,但在SQL Server中不知道有没有类似的SQL语法。
2010-10-10 16:08
zhaoyang1008
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:110
注 册:2010-9-15
收藏
得分:5 

可以用这个函数求得每个单位的父子级别
程序代码:
create function [dbo].[fnGetlevel] (@dwbm varchar(50))
returns int
as
begin
     declare @count int
     declare @name varchar(50)
     declare @temp varchar(50)
     set @count=1
     select @name=父级单位 from Table_1
     where 单位编码=@dwbm
    while @name is not null
     begin
         set @count=@count+1
         set @temp=@name
         select @name=父级单位 from Table_1
         where 单位编码=@temp
        
     end
     
    return @count
end 
2010-10-10 20:27
快速回复:求助高手:编写一个SQL Server查询语句
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042402 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved