2016-11-04 76 views
1

我一直在研究這個查詢將近兩天。下面有一張工作人員桌子。每個地點都有多位員工根據列出的alpha來獲取他們需要照顧的客戶名單。然而,阿爾法不是標準的單字符或雙字符,而是他們將單個直到三個字母放在桌子上。我試圖根據客戶姓氏在這些alpha範圍內獲得客戶名單和他們的分配人員,我嘗試了很多查詢,並且他們都在某個級別上失敗。基於多個字符alpha的SQL Server 2008名稱列表

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

設置[壞習慣踢 - 把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; 

其實,我我不確定你想要什麼輸出,但是這列出了分配給每個客戶的工作人員。

+0

非常感謝,現在正在完美地工作。我認爲我正在反思這一點,主要關注阿爾法集,而不是整體。 – JOZO

相關問題