求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 select11 , 'c' goselect * ,有无下属=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 @TBSELECT 1 , 'a' UNION ALLSELECT 2 , 'b' UNION ALL--SELECT 11 , 'c' UNION ALLSELECT 22 , 'b' UNION ALLSELECT 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 '无'ENDFROM @TB T(所影响的行数为 4 行)代码 名称 ----------- ---------- ---- 1 a 有2 b 有22 b 无111 D 无(所影响的行数为 4 行)
[解决办法]
- SQL code
DECLARE @TB TABLE(代码 INT, 名称 VARCHAR(10))INSERT @TBSELECT 1 , 'a' UNION ALLSELECT 2 , 'b' UNION ALL--SELECT 11 , 'c' UNION ALLSELECT 22 , 'b' UNION ALLSELECT 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 '无'ENDFROM @TB T(所影响的行数为 4 行)代码 名称 ----------- ---------- ---- 1 a 有2 b 有22 b 无111 D 无(所影响的行数为 4 行)