我希望使用列表(dbo.Split
)调用我的函数(U.UbicacionF
),但它不起作用!请你帮我!!感谢
SELECT
EE.IDEstatus, EE.IDAsignacion,EE.IDUNIDAD,
EE.IDEQUIPO,EE.ESTATUS,EE.bUltEstatus,
A.IDDestino, U.UbicacionF, TI.Tiempo
FROM
mar_EstatusEquipo EE
LEFT JOIN
mar_Asignaciones A ON EE.IDAsignacion = A.IDAsignacion
AND EE.IDUNIDAD = A.IDUNIDAD
LEFT JOIN
mar_TmpUbicaciones U ON EE.IDUNIDAD = U.IdUnidad AND U.IdUnidad = A.IDUNIDAD
LEFT JOIN
mar_TiemposArriboPto TI ON A.IDDestino = TI.Destino
AND TI.Ubicacion LIKE '%' + (SELECT *
FROM dbo.Split(U.UbicacionF, ',', '1')) + '%'
WHERE
EE.IDEquipo = CAST(EE.IDUNIDAD AS CHAR)
AND EE.Estatus IN ('IT','ET')
AND A.IDDestino = 'MZO'
AND EE.bUltEstatus = 1
AND EE.IDUNIDAD = 255
ORDER BY
EE.IDUNIDAD
答案 0 :(得分:0)
您可以使用APPLY运算符将列传递给表值函数。在你的情况下,它宁愿应用于CROSS APPLY,以匹配你当前的外连接逻辑:
SELECT
EE.IDEstatus, EE.IDAsignacion,EE.IDUNIDAD,
EE.IDEQUIPO,EE.ESTATUS,EE.bUltEstatus,
A.IDDestino, U.UbicacionF, TI.Tiempo
FROM
dbo.mar_EstatusEquipo EE
LEFT JOIN
dbo.mar_Asignaciones A ON EE.IDAsignacion = A.IDAsignacion
AND EE.IDUNIDAD = A.IDUNIDAD
LEFT JOIN
dbo.mar_TmpUbicaciones U ON EE.IDUNIDAD = U.IdUnidad AND U.IdUnidad = A.IDUNIDAD
OUTER APPLY (
SELECT t.Tiempo
FROM
dbo.mar_TiemposArriboPto AS t
INNER JOIN
dbo.Split(U.UbicacionF, ',', '1') AS s ON t.Ubicacion LIKE '%' + s.Value + '%'
) AS TI
WHERE
EE.IDEquipo = CAST(EE.IDUNIDAD AS CHAR)
AND EE.Estatus IN ('IT','ET')
AND A.IDDestino = 'MZO'
AND EE.bUltEstatus = 1
AND EE.IDUNIDAD = 255
ORDER BY
EE.IDUNIDAD
;