0 голосов
спросил от в категории SQLServer
У вас очень мало шансов на то, что мы пройдем через этот код без использования выборочных данных. Это также трудно прочитать, потому что вы используете зарезервированные слова для имен столбцов - это плохая практика, но если вы их используете, то окружите их квадратными скобками, например. [DateTime], [Event]

Вы сказали: «Но это не дает ожидаемого результата» ... но вы не сказали нам, что это ожидаемый результат! Мы не можем видеть ваш экран, ваш жесткий диск или ваши глаза, поэтому вам нужно предоставить нам достаточно информации.
Я предлагаю вам упростить это, удалив материал, пока у вас не будет минимум, который все еще демонстрирует проблему - например, весь код CTE RCode может быть сведен к одному запросу выбора для целей расследования

Если «Я хотел бы понять, почему используется самосоединение», вы ссылаетесь на строку
LEFT JOIN CTE prev ON prev.RowNum = (CTE.RowNum-CTE.SerialNum)+1 AND prev.SkillTargetID=CTE.SkillTargetID
, то это метод для получения «предыдущей» записи на основе определенных критериев. Существуют и другие методы, обсуждаемые в статье
LEFT JOIN CTE prev ON prev.RowNum = (CTE.RowNum-CTE.SerialNum)+1 AND prev.SkillTargetID=CTE.SkillTargetID
# [
--Problem here [Activity] = CASE WHEN (CTE.Event = 3 AND CTE.Duration=1800 and CTE.SerialNum=1) THEN CTE.DateTime WHEN (CTE.Event = 3 AND CTE.Duration=900 and CTE.SerialNum=1) THEN CTE.DateTime
#]

Если вы хотите прокомментировать CASE в CTE2, вы не можете просто использовать
--Problem here [Activity] = CASE WHEN (CTE.Event = 3 AND CTE.Duration=1800 and CTE.SerialNum=1) THEN CTE.DateTime WHEN (CTE.Event = 3 AND CTE.Duration=900 and CTE.SerialNum=1) THEN CTE.DateTime
Вы должны прокомментировать весь оператор CASE ... т.е. весь путь к END
Как это, например:
/*Problem here [Activity] = CASE WHEN (CTE.Event = 3 AND CTE.Duration=1800 and CTE.SerialNum=1) THEN CTE.DateTime WHEN (CTE.Event = 3 AND CTE.Duration=900 and CTE.SerialNum=1) THEN CTE.DateTime WHEN (CTE.Event = 3 AND CTE.Duration=1800 and CTE.SerialNum<>1) THEN prev.DateTime  WHEN (CTE.Event = 3 AND CTE.Duration=900 and CTE.SerialNum<>1) THEN prev.DateTime    ELSE CTE.DateTime   END */

Используйте цветовое кодирование, чтобы помочь вам определить, были ли комментарии прокомментированы.

Если вы разместите образцы данных, которые нам нужны, и некоторые ожидаемые результаты в ваш вопрос (используя ссылку «Улучшить вопрос»), а затем прокомментируйте это решение, когда вы закончите, я буду уведомлен и попытаюсь помочь дальше

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

Категории

Добро пожаловать на сайт DraftingCode Q&A, где вы можете задавать вопросы и получать ответы от других членов сообщества.

Связанных вопросов не найдено

...