将表列的序号索引向左移动

时间:2013-04-29 13:40:45

标签: sql sql-server tsql

考虑以下表格片段: enter image description here

此特定表中有14列,所有未显示的列都可以,但从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

表中的此错误仅发生在整个表行的约.05%中,并且与条件一起发生 `其中std_cost喜欢'%,%'。 无论如何我可以一次更新所有这些列吗?我当时认为可以使用序列表和列的序数索引。

2 个答案:

答案 0 :(得分: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 '%,%';

答案 1 :(得分: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 '%,%'