2017-02-11 4 views
0

У меня есть таблица, которая содержит идентификатор банка (не уникальный) и имена банка в таблице. Если название банка содержит ключевое слово «банк», я хочу его ранжировать, и если он имеет «финансовый» рейтинг, он два, а «Траст» получает звание три.sql server rank using keywords

Create table dbo.banknames(id int null,bankname varchar(200) null) 
insert into dbo.bankname(1,'U.S. Trust') 
insert into dbo.bankname(1,'Bank of america') 
insert into dbo.bankname(1,'BOA Financial services') 
insert into dbo.bankname(2,'Citizens trust') 
insert into dbo.bankname(3,'People''s bank trust') 
insert into dbo.bankname(3,'People''s financial service') 

Вывод должен выглядеть

Create table dbo.ExpectedOUTPUTbanknames(id int null,bankname varchar(200) null,rank int null) 
insert into dbo.ExpectedOUTPUTbankname(1,'U.S. Trust',3) 
insert into dbo.ExpectedOUTPUTbankname(1,'Bank of america',1) 
insert into dbo.ExpectedOUTPUTbankname(1,'BOA Financial services',2) 
insert into dbo.ExpectedOUTPUTbankname(2,'Citizens trust',3) 
insert into dbo.ExpectedOUTPUTbankname(3,'People''s bank trust',1) 
insert into dbo.ExpectedOUTPUTbankname(3,'People''s financial service',2) 

select * 
into dbo.OUTPUTbankname 
(
SELECT *,1 as RNK FROM dbo.banknames 
    WHERE (bankname LIKE '%bank%') 
    UNION 
    SELECT *,1 as RNK FROM dbo.banknames 
    WHERE (bankname LIKE '%financial%') 
    UNION 
    SELECT *,1 as RNK FROM dbo.banknames 
    WHERE (bankname LIKE '%trust%') 
) qrey 

Для bankid = 3, так как bankname имеет как ключевые слова банк и доверие, я получаю 3 строки, 'Народный банк' доверие»с рангом = 1 «Народная финансовая служба» с ранга = 2 «Народный банковский траст» с рангами = 3. Как можно избежать этого

Благодаря MR

+0

Что произойдет, если в спине содержатся ключевые слова mulitple? –

+0

Он должен выбрать самый высокий. Если у банка есть «банк и доверие», он должен быть занят 1, потому что у него есть ключевое слово «bank» – user2726975

+0

. Тогда ответ, который я вам дал ниже, должен работать. –

ответ

1

Использовать CASE выражение:

SELECT id, 
     bankname, 
     CASE WHEN bankname LIKE '%[Bb]ank%'  THEN 1 
      WHEN bankname LIKE '%[Ff]inancial%' THEN 2 
      WHEN bankname LIKE '%[Tt]rust%'  THEN 3 
     END AS rank 
FROM dbo.banknames 

К счастью SQL Server поддерживает характер диапазонов в своих LIKE выражениях, что делает его легко подобрать ключевые слова, независимо от того, первая буква должна быть капитализирована или нет.

Смежные вопросы