Sql 将表列的顺序索引向左移动

Sql 将表列的顺序索引向左移动,sql,sql-server,tsql,Sql,Sql Server,Tsql,请考虑以下表格片段: 此特定表格中有14列,未显示的所有列都可以,但从强度列开始,所有值都已按顺序向右移动了一个位置。所以100MG应该是强度,而不是天数,数量应该在天数栏中,药物类别应该用H4B中当前的数据填充。最后,std_cost中逗号之前的所有内容都应该放在左侧的一列中,列右侧的所有内容都应该放在std_cost中。所以他们的表应该是什么样子的一个片段(为了简洁起见缩短):(SQLServer2008) 表中的此错误仅发生在整个表中约.05%的行中,并且在条件下发生 `其中std_的成

请考虑以下表格片段:

此特定表格中有14列,未显示的所有列都可以,但从
强度
列开始,所有值都已按顺序向右移动了一个位置。所以100MG应该是强度,而不是天数,数量应该在天数栏中,药物类别应该用H4B中当前的数据填充。最后,std_cost中逗号之前的所有内容都应该放在左侧的一列中,列右侧的所有内容都应该放在std_cost中。所以他们的表应该是什么样子的一个片段(为了简洁起见缩短):(SQLServer2008)

表中的此错误仅发生在整个表中约.05%的行中,并且在条件下发生 `其中std_的成本类似于“%”、%”。
我是否可以一次更新所有这些列?我在想,使用序列表和列的顺序索引可能是可行的。

如果我做得对的话,可以这样做:

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 '%,%';

由于您只有大约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 '%,%'

当使用查询std_cost(如“%”、%”)时,是否使用相同的查询来提取数据列,或使用不同的查询?我使用相同的查询,但没有使用where子句筛选器。只要where子句过滤器在update查询中,任何正常的操作都不会受到影响。想想看,我本来打算让自己更难做到这一点+1提供了一个更好、更简单的解决方案。
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 '%,%'