日期:2014-05-18  浏览次数:20492 次

求sql语句如何实现?
代码,名称
1 a
2 b
11 c
(代码11表示为1的下级)
我要通过一条句子,得出如下结果:

代码,名称,有无下级
1 a 有
2 b 无
11 c 无

------解决方案--------------------
SQL code
create table # (代码 int, 名称 varchar(3))
insert # select 
1   , 'a' union all select  
2   , 'b'  union all select
11  , 'c' 
go
select * ,
有无下属=case when exists(select * from # where l.代码<>代码 and charindex(rtrim(l.代码),rtrim(代码))=1) then '有' else '无' end 
from # l 
代码          名称   有无下属
----------- ---- ----
1           a    有
2           b    无
11          c    无

------解决方案--------------------
Assembly code
DECLARE @TB TABLE(代码 INT, 名称 VARCHAR(10))
INSERT @TB
SELECT 1  ,  'a' UNION ALL
SELECT 2  ,  'b' UNION ALL
--SELECT 11 ,  'c' UNION ALL
SELECT 22  ,  'b' UNION ALL
SELECT 111 ,  'D' 

SELECT *,
CASE WHEN EXISTS
(SELECT 1 FROM @TB WHERE   LEN(T.代码)<LEN(代码)
AND REPLACE(代码,LEFT(T.代码,1),'')=REPLACE(T.代码,LEFT(T.代码,1),'') )THEN '有'ELSE '无'END
FROM @TB T


(所影响的行数为 4 行)

代码          名称              
----------- ---------- ---- 
1           a          有
2           b          有
22          b          无
111         D          无

(所影响的行数为 4 行)

------解决方案--------------------
SQL code
DECLARE @TB TABLE(代码 INT, 名称 VARCHAR(10))
INSERT @TB
SELECT 1  ,  'a' UNION ALL
SELECT 2  ,  'b' UNION ALL
--SELECT 11 ,  'c' UNION ALL
SELECT 22  ,  'b' UNION ALL
SELECT 111 ,  'D' 

SELECT *,
CASE WHEN EXISTS
(SELECT 1 FROM @TB WHERE   LEN(T.代码)<LEN(代码)
AND REPLACE(代码,LEFT(T.代码,1),'')=REPLACE(T.代码,LEFT(T.代码,1),'') )THEN '有'ELSE '无'END
FROM @TB T


(所影响的行数为 4 行)

代码          名称              
----------- ---------- ---- 
1           a          有
2           b          有
22          b          无
111         D          无

(所影响的行数为 4 行)