我试图在';'时拆分一行字符出现。我有一个包含项目的列表,其中一列说明该项目属于哪个区域。但是,某些项目出现在多个地区,因此写为“ 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
我希望输出结果是一个新表,其中包含出现在多个区域的每个项目的新行。
答案 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