Усечение 2-го вхождения подстроки в строке в SQL Server

У меня есть SELECT запрос, который содержит CASE выражение. У меня есть столбец "Всего" с текстом "GrandTotalGroupTotal". Есть второй столбец с текстом "GrandTotalGroup". Чтобы суммировать строки в столбце "GrandTotalGroup" и поместить строку "GrandTotalGroupTotal", я определяю правильные строки в операторе CASE, как показано ниже.

Мне нужно обрезать последний "Итого" из значения столбца. Это утверждение SELECT работает. Я хотел бы удалить жестко закодированное значение GrandTotalGroup, если это возможно.

SELECT SUG3.LineOrder AS SNo, 
       CASE WHEN (Visits IS NULL) 
            THEN (SELECT SUM(ISNULL(CTE3.Visits, 0)) 
                  FROM CTE3 
                  WHERE CTE3.GroupSetName = 'GrandTotalGroup') 
            ELSE ISNULL(Visits, 0) END AS Visits 
FROM  UDSStaffUtilizationGroups SUG3 
          LEFT OUTER JOIN CTE3 ON CTE3.UDSStaffGroupID = SUG3.UDSStaffGroupID
GROUP BY SUG3.LineOrder, SUG3.GroupSetName, SUG3.GroupTotalName, CTE3.Visits

Есть ли способ использовать строковые функции для изменения:GrandTotalGroupTotal на GrandTotalGroup

2 ответа

Если я правильно поняла

SELECT SUBSTRING('GrandTotalGroupTotal', 1, 15)  
Create function Replace2ndOccurance(@str varchar(500),@strTrunc varchar(100))
returns varchar(500)
as
begin
Return Replace(STUFF(STUFF(@str,patindex('%'+@strTrunc+'%',@str),len  (@strTrunc), '-'),patindex('%'+@strTrunc+'%',STUFF(@str,patindex('%'+@strTrunc+'%',@str),len(@strTrunc), '-')),len(@strTrunc),''),'-',@strTrunc)    
end
select dbo.Replace2ndOccurance('GrandTotalGroupTotal','Total')
Другие вопросы по тегам