sql命令由hierachical之类的

时间:2018-03-26 10:53:58

标签: sql sql-server sql-like sql-order-by

我正在使用Confluence网页,该网页显示基于数据库功能的下拉列表。此功能没有参数。此函数返回视图的结果。

当我开始在文本字段中输入一些文本时,下拉列表结果显示数据排序。

实例:

text entered : toto
dropdown list list result : 

aaa.toto.aim
aaa.toto.becare
toto
toto.aim
toto.aim.thisis
toto.becare
toto.becare.xxx

视图有多列:code_part1,code_part2,code_part3,fullcode(对应于结果显示,code_part1 +'。'+ code_part2 +'。+ + code_part3的串联):

fullcode            |    code_part1    |     code_part2      | code_part3
aaa.toto.aim        |    aaa           |     toto            | aim
aaa.toto.becare     |    aaa           |     toto            | becare
toto                |    toto          |     (null)          | (null)
toto.aim            |    toto          |     aim             | (null)
toto.aim.thisis     |    toto          |     aim             | thisis
toto.becare         |    toto          |     becare          | (null)
toto.becare.xxx     |    toto          |     becare          | xxx

如何使用order by子句更新函数取决于我在文本框中输入的内容(此处为“toto”):

toto
toto.aim
toto.aim.thisis
toto.becare
toto.becare.xxx
aaa.toto.aim
aaa.toto.becare
提前谢谢。 问候

2 个答案:

答案 0 :(得分:0)

您可以按顺序使用案例

DECLARE @SearchString CHAR ='toto'
SELECT fullcode 
FROM TABLENAME
ORDER BY CASE WHEN part1 = @SearchString THEN part1  WHEN part2 = @SearchString THEN PART2 ELSE part3 END

答案 1 :(得分:0)

试试这个,

declare @t table(fullcode varchar(50),code_part1  varchar(50), code_part2  varchar(50), code_part3  varchar(50))
insert INTO @t VALUES
('aaa.toto.aim'        ,'aaa'    ,    'toto' ,              'aim'  )
,('aaa.toto.becare'     ,'aaa'    ,    'toto'  ,          'becare'  )
,('toto'                ,'toto'   ,    null ,         null        )
,('toto.aim'            ,'toto'   ,    'aim'    ,         null    )
,('toto.aim.thisis'     ,'toto'   ,    'aim' ,            'thisis' )
,('toto.becare'         ,'toto'   ,    'becare'   ,      null     )
,('toto.becare.xxx'     ,'toto'   ,    'becare',           'xxx'      )

declare @key varchar(50)='toto'

select *,1 rownum from @t where code_part1=@key
union ALL
select *,2 rownum from @t where code_part2=@key
union ALL
select *,3 rownum from @t where code_part3=@key