2016-11-04 2 views
1

私はこのクエリを約2日間作業しています。スタッフのためのテーブルがあります。各場所には、リストされたアルファに基づいて世話をする顧客のリストを取得する複数のスタッフがいます。アルファは標準のシングルまたはダブルの文字ではなく、テーブルのように3つの文字を1から3つ置きます。私は顧客のリストとそのアルファレンジの顧客の姓に基づいてスタッフを割り当てようとしています。私は多くのクエリを試してみましたが、すべて失敗しています。複数の文字アルファベットに基づく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

次の順序ですべてを取得するために、CTEのカップルを使用してみました:

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

関連する問題