SQL语句单表查询的问题,蛮绕的求帮助

嗳嘉 2012-01-11 01:41:30
比如表中有三列:

ID 名称 上级ID
0 总公司 0
1 技术部 0
2 研发部 1
3 销售部 0


查询的时候我想查出的是

名称 上级名称
总公司 总公司
技术部 总公司
研发部 技术部
销售部 销售部


大概就是这么个意思,SQL语句怎么写啊有没有大大帮我下~~~~我实在搞不出来了
...全文
140 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗳嘉 2012-01-11
  • 打赏
  • 举报
回复
十分感谢,咱明白了
usbusb2007 2012-01-11
  • 打赏
  • 举报
回复
直接用
嗳嘉 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 maco_wang 的回复:]

SQL code

--都是一句话

select a.名称,b.名称 AS 上级名称 from 你的表名 a LEFT JOIN 你的表名 b ON a.上级ID=b.ID
[/Quote]

那个A和B是怎么来的?用上面语句临时建立的么?还是说直接用就可以呢?
叶子 2012-01-11
  • 打赏
  • 举报
回复

--都是一句话

select a.名称,b.名称 AS 上级名称 from 你的表名 a LEFT JOIN 你的表名 b ON a.上级ID=b.ID

嗳嘉 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 josy 的回复:]

引用 6 楼 jingjiting26 的回复:
哇。。。都是用table。。。好高端。。。难道我out了么。。。。有用一行单纯的select查询能实现么


楼主应该认真阅读一下各位写的代码,实际查询代码就这么一句:

select a.名称,isnull(b.名称,a.名称) as 上级名称 from tb a left join tb b on a.上级ID=b.id
[/Quote]

不是没认真看,是的确看不太懂。。。哎。。可能是我太笨了,我再研究研究
苦苦的潜行者 2012-01-11
  • 打赏
  • 举报
回复
create table t1(id int,名称 varchar(10),上级id int)
insert t1
select 0, '总公司', 0 union all
select 1, '技术部', 0 union all
select 2, '研发部', 1 union all
select 3, '销售部', 0
go
select 名称,上级名称=(select 名称 from t1 where id=a.上级id ) from t1 as a
/*
名称 上级名称
--- ------
总公司 总公司
技术部 总公司
研发部 技术部
销售部 总公司
*/
go
drop table t1
百年树人 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jingjiting26 的回复:]
哇。。。都是用table。。。好高端。。。难道我out了么。。。。有用一行单纯的select查询能实现么
[/Quote]

楼主应该认真阅读一下各位写的代码,实际查询代码就这么一句:

select a.名称,isnull(b.名称,a.名称) as 上级名称 from tb a left join tb b on a.上级ID=b.id
勿勿 2012-01-11
  • 打赏
  • 举报
回复
上面就是
[Quote=引用 6 楼 jingjiting26 的回复:]
哇。。。都是用table。。。好高端。。。难道我out了么。。。。有用一行单纯的select查询能实现么
[/Quote]
嗳嘉 2012-01-11
  • 打赏
  • 举报
回复
哇。。。都是用table。。。好高端。。。难道我out了么。。。。有用一行单纯的select查询能实现么
勿勿 2012-01-11
  • 打赏
  • 举报
回复
上面的是关联到他的ID 所以改成关联



if OBJECT_ID('tb') is not null
drop table tb
go
create table tb(ID INT,名称 varchar(50),上级ID INT)
insert into tb
select 0,'总公司',0 union all
select 1,'技术部',0 union all
select 2,'研发部',1 union all
select 3,'销售部',0

--名称 上级名称
--总公司 总公司
--技术部 总公司
--研发部 技术部
--销售部 销售部


select a.名称,b.名称 AS 上级名称 from tb a LEFT JOIN tb b ON a.上级ID=b.ID



(4 行受影响)
名称 上级名称
-------------------------------------------------- --------------------------------------------------
总公司 总公司
技术部 总公司
研发部 技术部
销售部 总公司

(4 行受影响)
勿勿 2012-01-11
  • 打赏
  • 举报
回复

if OBJECT_ID('tb') is not null
drop table tb
go
create table tb(ID INT,名称 varchar(50),上级ID INT)
insert into tb
select 0,'总公司',0 union all
select 1,'技术部',0 union all
select 2,'研发部',1 union all
select 3,'销售部',0

--名称 上级名称
--总公司 总公司
--技术部 总公司
--研发部 技术部
--销售部 销售部
select 名称,case when 名称='总公司' or 名称='技术部' then '总公司' when 名称='研发部' then '技术部' else 名称 end as '上级名称' from tb




(4 行受影响)
名称 上级名称
-------------------------------------------------- --------------------------------------------------
总公司 总公司
技术部 总公司
研发部 技术部
销售部 销售部

(4 行受影响)
叶子 2012-01-11
  • 打赏
  • 举报
回复

declare @t table (ID int,名称 varchar(6),上级ID int)
insert into @t
select 0,'总公司',0 union all
select 1,'技术部',0 union all
select 2,'研发部',1 union all
select 3,'销售部',0

select a.名称,b.名称 AS 上级名称 from @t a LEFT JOIN @t b ON a.上级ID=b.ID
/*
名称 上级名称
------ ------
总公司 总公司
技术部 总公司
研发部 技术部
销售部 总公司
*/
百年树人 2012-01-11
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[名称] varchar(6),[上级ID] int)
insert [tb]
select 0,'总公司',0 union all
select 1,'技术部',0 union all
select 2,'研发部',1 union all
select 3,'销售部',0

select a.名称,isnull(b.名称,a.名称) as 名称
from tb a
left join tb b on a.上级ID=b.id


--测试结果:
/*
名称 名称
------ ------
总公司 总公司
技术部 总公司
研发部 技术部
销售部 总公司

(4 行受影响)
*/
勿勿 2012-01-11
  • 打赏
  • 举报
回复
case when then .. else end

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧