Похоже, вы все еще не получаете все строки, которые вы хотите. Правда? Я думаю, что @Joe Sefanelli обеспечивает важную часть вашего решения, а затем упоминает, что вам нужно поменять INNER на LEFT.
Итак, вы говорите, что хотите отобразить все единицы в списке своих единиц. И, если нет данных для единицы, отобразите единицу измерения и пустые данные для несуществующих данных.
Вот возможное решение. Измените предложение FROM на следующее:
FROM [dbo].[Unit] u
LEFT OUTER JOIN
(
SELECT *
FROM [dbo].[IUA] i
JOIN [dbo].[Reports] r ON r.[Report_ID] = i.[Report_ID]
JOIN [dbo].[State] s ON i.[St_ID] = s.[St_Id]
WHERE r.[Account] = [dbo].[fn_Get_PortalUser_AccountNumber](11-11)
AND r.[Rpt_Period] = '2126'
AND r.[RptName] = 'tfd'
AND r.[Type] = 'h'
) ir ON ir.[Unit_ID] = u.[Unit_ID]
LEFT JOIN [dbo].[UnitType] ut ON u.[UnitType] = ut.[UnitType]
WHERE u.[Unit] IN (SELECT [VALUE]
FROM dbo.udf_GenerateVarcharTableFromStringList(@Units, ','))
;
С этим изменением вы получите список юнитов, которые есть в списке @Units. Левые внешние объединения будут включать данные, связанные с каждой единицей, но не будут исключать единицы, если нет связанных данных.