2017-02-03 91 views
0

我有一个包含CASE表达式的SELECT查询。 我有一个'总计'列'文字'GrandTotalGroupTotal'。 还有第二列文字'GrandTotalGroup'。 若要对“GrandTotalGroup”列中的行进行求和并放置该行“GrandTotalGroupTotal”行,我将在CASE语句中标识出正确的行,如下所示。在SQL Server中截断字符串中子字符串的第二次出现

我需要从列值中截断最后一个“总计”。 这个SELECT语句有效。 Bu如果可能,我想删除硬编码值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 

有没有办法使用字符串函数来改变: GrandTotalGroupTotalGrandTotalGroup

回答

0

如果我正确

SELECT SUBSTRING('GrandTotalGroupTotal', 1, 15) 
+0

这是可行的理解,但它不是足够通用。 –

0
Create function Replace2ndOccurance(@str varchar(500),@strTrunc varchar(100)) 
returns varchar(500) 
as 
begin 
Return Replace(STUFF(STUFF(@str,patindex('%'[email protected]+'%',@str),len (@strTrunc), '-'),patindex('%'[email protected]+'%',STUFF(@str,patindex('%'[email protected]+'%',@str),len(@strTrunc), '-')),len(@strTrunc),''),'-',@strTrunc)  
end 
select dbo.Replace2ndOccurance('GrandTotalGroupTotal','Total') 
+0

谢谢。我会试试这个。 –

相关问题