Tsql 对计算字段进行计数

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

使用SQL Server 2012

我有以下代码:

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])