我有一个格式低于表格的表格
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执行此操作。
提前致谢
答案 0 :(得分: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
答案 1 :(得分:1)
查看CodePlex上提供的UnPivotDelimitedString
自定义转换(链接如下)。
我不能保证它没有任何好处,但它似乎有助于完成你在SSIS中的任务。