Tsql 对计算字段进行计数
使用SQL Server 2012 我有以下代码:Tsql 对计算字段进行计数,tsql,sql-server-2012,Tsql,Sql Server 2012,使用SQL Server 2012 我有以下代码: Select Distinct [A_number] + '-' + convert(varchar(10),[zone]) As myNumber FROM [dbo].[soils]; 我需要编辑此查询,以获得每个myNumber的计数。 关于,使用COUNT() 这将为您提供转换中唯一的myNumber计数 并按考虑组,如果您需要对每个唯一的MyNoUT进行计数。 SELECT [A_number] + '-' + CONVERT(V
Select Distinct [A_number] + '-' + convert(varchar(10),[zone]) As myNumber
FROM [dbo].[soils];
我需要编辑此查询,以获得每个myNumber
的计数。
关于,使用COUNT()
这将为您提供转换中唯一的myNumber
计数
并按考虑<代码>组,如果您需要对每个唯一的MyNoUT进行计数。
SELECT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]), COUNT(*)
FROM [dbo].[soils]
GROUP BY [A_number] + '-' + CONVERT(VARCHAR(10),[zone])
我要做的是使用
groupby
语句:
SELECT A_number,
zone,
COUNT(*) AS c
FROM dbo.soils
GROUP BY A_number,
zone;
然后,使用该结果对字段进行合并。这样做将允许使用索引:
WITH numbers AS (
SELECT A_number,
zone,
COUNT(*) AS c
FROM dbo.soils
GROUP BY A_number,
zone
)
SELECT A_number + '-' + convert(varchar(10),zone) As myNumber,
c AS number_count
FROM numbers;
要获取与
myNumber
的每个值相关联的行数,请舍弃DISTINCT
,改用groupby
最简单的示例是,在GROUPBY子句的SELECT列表中重复以下表达式:
SELECT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]) AS myNumber
, COUNT(*) AS cnt
FROM [dbo].[soils]
GROUP
BY [A_number] + '-' + CONVERT(VARCHAR(10),[zone])
对于平凡的集合,性能不会是问题。对于较大的电视机,性能可能会受到影响。解决方案是重新处理查询以利用现有索引,或添加适当的索引。谢谢,但我需要计算每个唯一的mynumber,而不是由“@JRLambert:你说得对”组成的“唯一mynumberConsider”组的总数。啊!完全错过了
计数(*)
聚合。现在修好了。我也可以选择使用SUM(1)作为cnt
在裸列上进行分组操作是标准模式。这允许使用合适的索引。如果没有WHERE子句,此查询最佳索引的最佳匹配将具有(A_number,zone)
的前导列+10存在一种边缘情况,该查询将返回与原始查询不同的结果。考虑使用<代码>(A^编号,区域)<代码> >“代码>(‘1-’,‘a’))/<代码>和<代码>(‘1’,‘A’)< /代码>的行。
SELECT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]) AS myNumber
, COUNT(*) AS cnt
FROM [dbo].[soils]
GROUP
BY [A_number] + '-' + CONVERT(VARCHAR(10),[zone])