消息240,列中的锚点和递归部分之间的类型不匹配

时间:2019-07-05 11:56:05

标签: sql sql-server

我试图在';'时拆分一行字符出现。我有一个包含项目的列表,其中一列说明该项目属于哪个区域。但是,某些项目出现在多个地区,因此写为“ 1; 2; 3”(1、2和3区)。我要从中创建三行并在';'上分割。

错误消息显示:

  

消息240,第16级,状态1,第13行
  递归查询“ tmp”的列“ DataItem”中的锚点与递归部分之间的类型不匹配。

我尝试了split_string,但是发现我的服务器是2014年并且缺乏兼容性。

WITH tmp(Oppdragsnr, Kommune, DataItem, Kommunenr) AS
(
    SELECT
        Oppdragsnr,
        Kommune,
        LEFT(Kommunenr, CHARINDEX(';', Kommunenr + ';') - 1),
        STUFF(Kommunenr, 1, CHARINDEX(';', Kommunenr + ';'), '')
    FROM 
        oppdragene

    UNION all

    SELECT
        Oppdragsnr,
        Kommune,
        LEFT(Kommunenr, CHARINDEX(';', Kommunenr + ';') - 1),
        STUFF(Kommunenr, 1, CHARINDEX(';', Kommunenr + ';'), '')
    FROM  
        tmp
    WHERE
        Kommunenr > ''
)
SELECT
    Oppdragsnr,
    Kommune,
    DataItem
FROM 
    tmp
ORDER BY 
    Oppdragsnr

我希望输出结果是一个新表,其中包含出现在多个区域的每个项目的新行。

1 个答案:

答案 0 :(得分:2)

您可能应该CAST to INT在查询的基础和递归部分中的DataItem列,以下查询应该为您工作

;WITH tmp(Oppdragsnr, Kommune, DataItem, Kommunenr) AS
(
    SELECT
        Oppdragsnr,
        Kommune,
        CAST(LEFT(Kommunenr, CHARINDEX(';', Kommunenr + ';') - 1) AS INT),
        STUFF(Kommunenr, 1, CHARINDEX(';', Kommunenr + ';'), '')
    FROM 
        oppdragene

    UNION all

    SELECT
        Oppdragsnr,
        Kommune,
        CAST(LEFT(Kommunenr, CHARINDEX(';', Kommunenr + ';') - 1)  AS INT),
        STUFF(Kommunenr, 1, CHARINDEX(';', Kommunenr + ';'), '')
    FROM  
        tmp
    WHERE
        Kommunenr > ''
)
SELECT
    Oppdragsnr,
    Kommune,
    DataItem
FROM 
    tmp
ORDER BY 
    Oppdragsnr