Сообщение 240, типы не совпадают между якорем и рекурсивной частью в столбце - PullRequest
2 голосов
/ 05 июля 2019

Я пытаюсь разбить строку, когда ';'персонаж появляется.У меня есть список с проектами, где в одной из колонок указано, к какому району относится проект.Однако некоторые проекты появляются в нескольких районах и поэтому пишутся как «1; 2; 3» (Район 1, 2 и 3).Я хочу создать три строки из этого и разделить их на ';'.

Сообщение об ошибке гласит:

Сообщение 240, Уровень 16, Состояние 1, Строка 13
Типы не совпадают между якорем и рекурсивной частью в столбце «DataItem» рекурсивного запроса «tmp».

Я пробовал 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 Ответ

2 голосов
/ 05 июля 2019

Вероятно, вам следует 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...