我正在尝试将数据从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
表值函数,但我不知道如何将其用于等式。
答案 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个表扫描)