【问题标题】:split data delimited by character拆分由字符分隔的数据
【发布时间】:2018-01-11 09:26:16
【问题描述】:

我真的很感谢有人的帮助 我是所有这些 SQL-SSIS 东西的新手 我在 SQL 中有下表:

我需要创建一个表,其中的列包含 AreaPath 列并由分隔符 \ 解析 这意味着我的最终目标是:

几件重要的事情:

  1. 原始表不断变化(每 10 分钟一次)
  2. 我有 SQL 2014
  3. 我可以使用 SSIS 来做到这一点(我更喜欢,而不是 SQL)

任何帮助将不胜感激 谢谢!

【问题讨论】:

标签: sql sql-server ssis etl


【解决方案1】:

如果您使用此link 中的字符串分隔函数并使用PIVOT

然后以下工作

DECLARE @Delim NVARCHAR(32) = '\';

DECLARE @t TABLE ( AreaSK INT, AreaName NVARCHAR(100), AreaPath NVARCHAR(100))
INSERT INTO @t
(AreaSK, AreaName, AreaPath)
VALUES
(12188, 'Kryptonite', '\Kryptonite'),
(12191, 'SL_A', '\Kryptonite\SL_A'),
(12192, 'P_Bender', '\Kryptonite\SL_A\ART_APL\PG_Apollo\P_Bender'),
(12194, 'PG_Edison', '\Kryptonite\SL_A\ART_APL\PG_Apollo\P_Bender\test\PG_Edison')

SELECT PVT.AreaSK
     , PVT.AreaName
     , PVT.TeamProject
     , PVT.AL
     , PVT.ART
     , PVT.PG
     , PVT.P
     , PVT.T
FROM
(
    SELECT
          T.AreaSK
        , T.AreaName
        , CASE
            WHEN rn = 1 THEN 'TeamProject'
            WHEN rn = 2 THEN 'AL'
            WHEN rn = 3 THEN 'ART'
            WHEN rn = 4 THEN 'PG'
            WHEN rn = 5 THEN 'P'
            WHEN rn = 6 THEN 'T'
          END 'Headings'
        , [Value]
    FROM 
    (
        SELECT T.AreaSK
             , T.AreaName
             , T.AreaPath
             , AreaPath2 = RIGHT(T.AreaPath, LEN(T.AreaPath) - 1) --remove first '\'
        FROM @t T
    )   T
    CROSS APPLY
        dbo.FN_SplitString_AB(T.AreaPath2, @Delim)
) T
PIVOT
(
    MAX(Value)
    FOR Headings IN ([T],[P],[PG],[ART],[AL],[TeamProject])
) PVT

输出

【讨论】:

  • 谢谢!我已经设法使用 SSIS 中的 TOKEN 功能做到了,但我也会尝试您的建议!
猜你喜欢
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 2022-11-17
  • 2014-06-13
  • 1970-01-01
  • 2019-09-19
  • 2013-11-27
  • 1970-01-01
相关资源
最近更新 更多