1

我有一个格式如下的表格

fact_id | A-B_dim_id | a_vector| b
1       | 1234       |  1.25,2.25,3.25  | 1.5

现在我想以以下格式将它们存储在不同的表中

fact_id | A-B_dim_id | a_vector_id|a_vector_value
anything| 1234       | 0          | 1.25
anything| 1234       | 1          | 2.25
anything| 1234       | 3          | 3.25

我无法控制向量中的值的数量,它的范围可以从 0 到 365 。

请建议我如何使用 SSIS 执行此操作。

提前致谢

4

2 回答 2

1

试试这个——

DECLARE @temp TABLE
(
      [A-B_dim_id] INT
    , a_vector NVARCHAR(50)
)

INSERT INTO @temp ([A-B_dim_id], a_vector)
VALUES (1234, '1.25,2.25,3.25')

DECLARE @temp2 TABLE
(
      fact_id INT IDENTITY(1,1) PRIMARY KEY
    , [A-B_dim_id] INT
    , a_vector_id SMALLINT
    , a_vector_value DECIMAL(10,2)
)

INSERT INTO @temp2 ([A-B_dim_id], a_vector_id, a_vector_value)
SELECT 
      [A-B_dim_id]
    , ROW_NUMBER() OVER (PARTITION BY [A-B_dim_id] ORDER BY 1/0)
    , t.c.value('.', 'DECIMAL(10,2)')
FROM (
     SELECT 
          [A-B_dim_id]
        , ID = CAST ('<t>' + REPLACE(a_vector, ',', '</t><t>') + '</t>' AS XML)
     FROM @temp
) r 
CROSS APPLY ID.nodes ('/t') t(c) 

SELECT * FROM @temp2

输出 -

fact_id     A-B_dim_id  a_vector_id a_vector_value
----------- ----------- ----------- ---------------------------------------
1           1234        1           1.25
2           1234        2           2.25
3           1234        3           3.25
于 2013-08-09T10:36:48.837 回答
1

查看 CodePlex 上可用的UnPivotDelimitedString自定义转换(下面的链接)。

UnPivotDelimitedString

我不能保证它有什么好处,但它似乎有助于完成你在 SSIS 中的任务。

于 2013-08-09T11:52:58.850 回答