Это всегда означает одно и то же: логическое ИЛИ
Это распространенный прием, использующий приведение типов. Многие не логические выражения оцениваются как ложные. Это так же, как это:
hrs = (hrs-12)
if(!hrs){
hrs = 12;
}
И if () работает, потому что 0 приводит к ложному. Он также используется для работы с неопределенными переменными:
function foo(optionalValue){
var data = optionalValue || "Default value";
}
foo();
foo("My value");
Используя трюк с XML, это должно сработать:
SELECT i.ItemDescription,
(SELECT x.ItemTypeDescription + ': ' + x.vals +
CASE WHEN (ROW_NUMBER() OVER (ORDER BY x.ItemType DESC) = 1) THEN '' ELSE '; ' END
FROM ( SELECT DISTINCT
ii.ItemPK,
t.ItemTypeDescription,
ii.ItemType,
(SELECT x.ItemValue +
CASE WHEN (ROW_NUMBER() OVER (ORDER BY x.ItemValue DESC) = 1) THEN '' ELSE ', ' END
FROM #ItemInfo x
WHERE x.ItemPK = ii.ItemPK
AND x.ItemType = ii.ItemType
ORDER BY x.ItemValue
FOR XML PATH('')
) AS VALS
FROM #ItemInfo ii
JOIN #ItemTypes t
ON ii.ItemType = t.ItemType
) x
WHERE x.ItemPK = i.ItemPK
ORDER BY x.ItemType
FOR XML PATH('')
) AS CombinedDescription
FROM #Items i
you could write a scalar value function that would contain a subquery in which it would perform the concatenation, or you could try coalesce, example here
Различные варианты агрегированной конкатенации строк в SQL Server были обобщены Анит Сен в этой публикации: http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values- in-transact-sql /
Обычно лучшим вариантом является трюк с XML PATH.