2016-11-04 3 views
1

Я работаю над этим запросом почти два дня. Существует таблица для персонала, как показано ниже. В каждом месте есть несколько сотрудников, которые получают список клиентов, которым они должны позаботиться об этом на основе перечисленных альфов. однако альфы не являются стандартными одиночными или двойными символами, вместо этого они помещают одну-три три буквы, как вы можете видеть на столе. Я пытаюсь получить список клиентов и их назначающих сотрудников на основе фамилии клиентов в этих альфа-диапазонах, я пробовал много запросов и все они терпят неудачу на определенном уровне.Список имен SQL Server 2008 на основе нескольких символов alphas

enter image description here

Я использовал пару КТР, чтобы получить все в порядке и попытался следующее максимальное

declare @maxChar varchar(3) = (select min(len(val)) from (
select staffStartChar val from StaffAlphaList where staffLocId = 1 
union 
select staffEndChar from StaffAlphaList where staffLocId = 1 
)temp) 

    select customerName 
    , upper(LTRIM(RTRIM(
       LTRIM(RTRIM(ISNULL(employee.f_name, ''))) + ' ' + 
       LTRIM(RTRIM(ISNULL(employee.m_name, ''))) + ' ' + 
       LTRIM(ISNULL(employee.l_name, '')) 
       ))) 
    from Customers with (nolock) 
    left outer join StaffAlphaList with (nolock) 
     on StaffAlphaList.staffLocId= Customers.LocId 
    left outer join employee with (nolock) 
     on employee.empl_no = StaffAlphaList.staffId 
    where lower(left(customerLastName, @maxChar)) between StaffAlphaList.staffStartChar and StaffAlphaList.staffEndChar 
+0

Set [Bad Habits to kick-putting NOLOCK повсюду] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - это не рекомендуется * использовать это везде - вполне наоборот! –

ответ

1

Я думаю, что это делает то, что вы хотите:

select c.*, sal.* 
from customers c left join 
    staffalphalist sal 
    on sal.staffLocId = c.LocId and 
     left(c.customerLastName, len(sal.startchar)) >= sa.startchar and 
     left(c.customerLastName, len(sal.endchar)) <= sa.endChar; 

На самом деле, я m не уверен точно, какой результат вы хотите, но в этом перечислены сотрудники, назначенные каждому клиенту.

+0

Большое вам спасибо, сейчас он отлично работает. Я думаю, что я переусердствовал и сосредоточился главным образом на альфа-наборах, а не на целом. – JOZO

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