Если мы сконцентрируемся на одной строке из вашего выхода CTE4:
Roadname RoadLength eglAvgtDepth pglAvgDepth eglLength pglLength roadCrossSection1
p3-AL-2137 103.997 -0.202500 0.170000 60.996 43.001 2A
, то посмотрим на ваше объединение в CTE5:
CTE5 AS (
SELECT roadName,roadLength,
IIF(C.roadCrossSection1=R.crossSection,R.CW,0) as CW1
FROM CTE4 AS C LEFT JOIN dbo.roadCrossSection AS R
ON C.roadName=R.crossSection -- <-- THIS JOIN HERE!!!
)
Итак, вы ищете строку в dbo.roadCrossSection
, где значение для crossSection
равно p3-AL-2137
(название дороги из CTE4).
На основе опубликованного вами снимка экрана теперь есть строки в dbo.roadCrossSection
, где crossSection = 'p3-AL-2137'
, поэтому запись не выполняется возвращается из dbo.roadCrossSection
.
Однако в таблице есть строка, в которой значение равно 2A
, что соответствует столбцу roadCrossSection1
, а не столбцу roadName
. Если вы измените свое объединение на следующее, то должны быть возвращены строки:
ON C.roadCrossSection1=R.crossSection
Как только ваше объединение будет правильным, ваше выражение IIF
станет избыточным и может быть заменено на ISNULL
:
CTE5 AS (
SELECT roadName,roadLength, ISNULL(R.CW,0) as CW1
FROM CTE4 AS C LEFT JOIN dbo.roadCrossSection AS R
ON C.roadCrossSection1=R.crossSection
)
SELECT *
FROM CTE5
ORDER BY roadName;