0

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テーブル値関数がありますが、それを方程式に組み込む方法がわかりません。

4

2 に答える 2

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で(データを含む)完全なソリューションを見ることができます。

于 2012-10-11T13:05:22.480 に答える
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 回のテーブル スキャンは必要ありません)

于 2012-10-11T13:58:14.500 に答える