SQL Server:将单行拆分为2行

时间:2012-10-11 12:49:07

标签: sql sql-server-2008-r2

我正在尝试将数据从Excel电子表格导入SQL Server 2008数据库,我需要先按一下数据。

我已使用数据导入向导以下列格式将其加载到数据库中的临时表中:

Id  ISOCode  Data
1   US       Foo
2   CA       Bar
3   US or CA Blah

如果ISO是OR分隔的字符串,例如US or CA,我需要将其拆分为2行,因此在最终目标表中它看起来像这样:

Id  ISOCode  Data
1   US       Foo
2   CA       Bar
3   US       Blah
3   CA       Blah

我确实有一个SplitString表值函数,但我不知道如何将其用于等式。

2 个答案:

答案 0 :(得分:2)

这是我的解决方案:

SELECT ID, 
   CASE 
     WHEN ( ISOCODE LIKE '% or %' ) THEN LEFT(ISOCODE, Charindex('or', 
                                                       ISOCODE) - 1 
                                         ) 
     ELSE ISOCODE 
   END AS ISOCode, 
   DATA 
FROM   TBL 
UNION 
SELECT ID, 
       RIGHT(ISOCODE, Len(ISOCODE) - ( Charindex('or', ISOCODE) + 2 ))AS ISOCode 
       , 
       DATA 
FROM   TBL 
WHERE  ISOCODE LIKE '% or %' 

您可以查看SQL Fiddle.

上的完整解决方案(包含数据)

答案 1 :(得分:0)

select t.Id, c.ISOCode, t.Data
from t
cross apply (select charindex(' or ', t.ISOCode) as OrIndex) idx
cross apply
(
  select t.ISOCode where idx.OrIndex = 0
  union all select left(t.ISOCode, idx.OrIndex - 1) where idx.OrIndex > 0
  union all select substring(t.ISOCode, idx.OrIndex + 4, len(t.ISoCode) - idx.OrIndex - 3) where idx.OrIndex > 0
) c

(此查询不需要2个表扫描)