我有以下存储过程来从表中获取数据。 该表有一个“区域”列,其中包含“APAC:China”等值,我正在使用子字符串函数来删除:以及后面的所有内容。
以下工作原理除外,它分别列出所有记录,而不是通过我的子字符串对它们进行分组。所以我有例如带有“APAC”区域的几个项目,而不是只有一个出现在下面的区域。
我的存储过程:
CREATE PROCEDURE [dbo].[CountRegions]
AS
BEGIN
SET NOCOUNT ON;
SELECT SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region,
COUNT(*) AS groupCount,
FROM SOPR_LogRequests
WHERE logStatus = 'active'
GROUP BY region
ORDER BY groupCount desc, region
FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks')
END
我的结果:
<ranks>
<regions>
<region>APAC</region>
<groupCount>1</groupCount>
</regions>
<regions>
<region>EMEA</region>
<groupCount>1</groupCount>
</regions>
<regions>
<region>APAC</region>
<groupCount>1</groupCount>
</regions>
// ...
</ranks>
预期结果:
<ranks>
<regions>
<region>APAC</region>
<groupCount>2</groupCount>
</regions>
<regions>
<region>EMEA</region>
<groupCount>1</groupCount>
</regions>
// ...
</ranks>
这里的任何人可以帮我这个吗?
感谢您的帮助,蒂姆。
答案 0 :(得分:17)
你的group by
不知道你是在引用基础列,还是函数代码的输出(它会假设基础列),所以你需要将代码重复到{{1} }: -
group by