使用SQL Server 2012的数计算字段
我有以下代码:
Select Distinct [A_number] + '-' + convert(varchar(10),[zone]) As myNumber
FROM [dbo].[soils];
我需要编辑此查询给我的每myNumber
的计数。 问候,
使用SQL Server 2012的数计算字段
我有以下代码:
Select Distinct [A_number] + '-' + convert(varchar(10),[zone]) As myNumber
FROM [dbo].[soils];
我需要编辑此查询给我的每myNumber
的计数。 问候,
我会做的是使用group by
声明:
SELECT A_number,
zone,
COUNT(*) AS c
FROM dbo.soils
GROUP BY A_number,
zone;
然后,使用该结果到Concat的你的领域。做这种方式将允许用指数法的:
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;
使用COUNT()
SELECT COUNT(DISTINCT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]))
FROM [dbo].[soils]
,这将给你从转换上唯一myNumber
计数。
并考虑GROUP BY
如果您需要计算每个唯一的mynumber。
SELECT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]), COUNT(*)
FROM [dbo].[soils]
GROUP BY [A_number] + '-' + CONVERT(VARCHAR(10),[zone])
谢谢,但我需要计算每个唯一的mynumber而不是唯一的mynumber总数 – PeterTheGeo
考虑'GROUP BY' – ydoow
要获得的myNumber
每个值相关联的行数,沟DISTINCT
并使用GROUP BY
代替。
最简单的例子,重复表达在SELECT列表在GROUP BY子句:
SELECT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]) AS myNumber
, COUNT(*) AS cnt
FROM [dbo].[soils]
GROUP
BY [A_number] + '-' + CONVERT(VARCHAR(10),[zone])
对于琐碎套,性能将不会是一个问题。对于较大的套件,性能可能会受损。那里的解决方案是重做查询以利用现有索引,或添加适当的索引。
@JRLambert:你说得对。 DOH!完全错过了COUNT(*)聚合。现在修复。我也可以选择使用'SUM(1)AS cnt' – spencer7593
通过在裸空列上操作进行组是规范模式。这允许使用合适的索引。没有WHERE子句的情况下,对于此查询的最佳索引,最好的选择是具有“(A_number,zone)”的前导列。 +10。有一个边缘情况,这个查询将返回与原始结果不同的结果。考虑具有'('1','a')'和'('1',' - a')'的'(A_number,zone)'值的行。 – spencer7593