2013-04-29 51 views
3

考慮一個表的下面的代碼片段: enter image description here移表列的序號索引向左

有在這個特定的表14列和所有未欄目的都OK,但與開始strength列的所有值已經在一個序數位置右移。因此,100MG應該是強度而不是days_sup,數量應該在days_sup列中,drug_class應該填充當前在H4B中的數據。最後,std_cost中的逗號前的所有內容都應該向左移動一列,而列右側的所有內容都應保留在std_cost中。所以表應該是什麼,他們喜歡的摘要將(簡稱爲簡潔起見):(SQL Server 2008中)

strength days_sup drug_class dispfee std_cost 
100MG  6   H4B   1.5  5.06 

這個錯誤在該表只在整個錶行的大約0.05%發生,條件爲 `where std_cost like'%,%'。 無論如何,我可以一次更新所有這些列嗎?我認爲可能使用序列表和列的序號索引。

+0

您是否使用相同的查詢來提取數據列或使用像'%,%'這樣的查詢std_cost的不同查詢? – Zeddy 2013-04-29 13:46:17

+0

我使用相同的查詢,只是沒有where子句過濾器。只要where子句過濾器在那裏,任何沒問題的更新查詢都不會受到影響。 – wootscootinboogie 2013-04-29 13:48:55

回答

2

如果我找到了正確的 - 這樣的事情:

update t 
SET strength=days_sup, 
    days_sup=quantity, 
    quantity=drug_class, 
    drug_class=fst_fill, 
    fst_fill=rfl_nbr, 
    rfl_nbr=prc_typ, 
    prc_typ=dispfee, 
    dispfee=SUBSTRING(std_cost,1,CHARINDEX(',',std_cost,1)-1) 
    std_cost=SUBSTRING(std_cost,CHARINDEX(',',std_cost,1)+1,100) 

where std_cost like '%,%'; 
+0

想一想,我會讓自己變得更難。 +1爲一個更好,更簡單的解決方案。 – wootscootinboogie 2013-04-29 14:02:28

2

既然你只有約9列有問題,我會做手工。像這樣,

UPDATE YourTable 
SET strength = days_sup 
    , days_sup = quantity 
    ..... 
    , dispfee = LEFT(STD_COST, CHARINDEX(',',STD_COST) -1) 
    , STD_COST = RIGHT (STD_COST, LEN(STD_COST) - CHARINDEX(',',STD_COST)) 
where std_cost like '%,%'