2014-06-17 16 views
0

獲得以下信件我有一個公司名稱表。有些公司擁有不同的地點和不同的法定名稱,但應根據相同的集團代碼進行報告。該守則使用前五個字母組成。從給定的

Company   GroupCode 
DEEZER FRANCE DEEZE 
DEEZER SPAIN DEEZE 
DEEZER ALGERIA DEEZE 

到目前爲止好。現在,我要添加一個以相同字母開頭的另一家公司,但應該得到一個新的組碼。

如果公司名稱不包含已經具有GroupCode的公司名稱的一部分,則應分配新代碼。在這種情況下,DEEZER是確定與GroupCode關聯的關鍵字DEEZE

規則是代碼應該使用字母表中前四個字母+下一個第五個字母。如果此代碼也存在,則使用前四個字母+下一個第五個字母,但在字母表中一個。所需結果如下:

Company   GroupCode Status 
DEEZER FRANCE DEEZE  EXISTING 
DEEZER SPAIN DEEZE  EXISITNG 
DEEZER ALGERIA DEEZE  EXISTING 
DEEZEMBER  DEEZF  CREATED 
DEEZEMAL  DEEZG  CREATED 

所以我需要弄清楚下一個「未使用」的字母。我如何通過SQL Server 2008 R2實現這一目標?

+0

您如何看待DEEZEMBER與3 DEEZER公司不同?有沒有什麼領域可以做到這一點? –

+0

@ shree.pat18有'Status'字段。 – rcs

+0

@ shree.pat18我添加了關於GroupCodes分配方式的一些解釋。希望有幫助 – Narti

回答

1

試試這個:

;with cte as 
(select max(groupcode) maxcode 
from yourtable 
where left(code,4) = left(@companyname,4)) 

insert into yourtable (company, groupcode, [status]) 
select @companyname, 
case when maxcode is null then left(@companyname,4) + 'a' else left(maxcode,4) + char(ascii(right(maxcode,1))+1) end, 
'created' 
from cte 

假設:您輸入走的是公司名稱,從某處參數,想必前端。

想法是使用ascii函數獲取最後一個字母的ASCII碼,將其加1並使用char函數返回相應的字符。

但要警告,這絕對不是最好的解決方案。例如,我沒有實現邊界檢查來確保A和Z之間的範圍。事實上,我建議您在應用程序代碼而不是數據庫級別處理此問題。

+0

感謝您指點我在正確的方向。 'ASCII'函數做到了這一點。 – Narti