sql server选择变量并计算结果

时间:2012-08-08 13:32:45

标签: sql-server select count combinations

非常简单,但我无法让它为我工作:)

select x.name, count(x.name) from <table_name> x where ...<complex and long>...

它抛出一个错误,即x.name不与group by一起使用。

select x.name from <table_name> x where ...<complex and long>...

工作正常并返回,例如6个名字

select count(x.name) from <table_name> x where ...<complex and long>...

工作也很好,并返回,例如数字6

但是当我尝试通过以下方式添加组时,组合无法正常工作:

select x.name, count(x.name) from <table_name> x where ...<complex and long>...
group by x.name

它有效,但所有计数都是1而不是6。

问题是,我首先可以将计数转换为变量,然后编写长sql语句只是为了获取名称,但我不想写两次长复杂的select语句。必须有一些方法可以在一个选择中进行组合:获取所有名称,顺便告诉我它们有多少。

由于

P.S。

name    bla1    bla2
a       ...     ...     
a       foo     ...     
b       foo     ...     
c       ...     ...     
d       foo     ...     
d       foo     ...     
b       foo     ...     
c       foo     ...     

x.name的结果,其中bla1 = foo将是:

a
b
d
d
b
c

count(x.name)的结果,其中bla1 = foo将是:

6

我想要的结果:

...variable definitions
select @foundName = x.name, @numOfAllFoundNames = count(x.name)
from <table_name> x where ...<complex and long>...

应该是: @foundName = a(只是其中一个名字,无论哪一个) @numOfAllFoundNames = 6

5 个答案:

答案 0 :(得分:2)

试试这个:

select x.name, count(x.name) over () cnt 
from <table_name> x where ...<complex and long>...

答案 1 :(得分:2)

最简单的方法是在查询后使用@@rowcount;

select x.name from <table_name> x where ...<complex and long>...

select 'the number of rows is:', @@rowcount

顺便说一句,如果您请求非聚合字段(name)和聚合字段(count(name)),则必须提供group by告诉服务器 计算;你看到1是因为group by namecount应用于集合中的每个不同的名称 - 例如。如果重复名称,你会看到少一行和2

答案 2 :(得分:0)

您可以在选择名称后使用@@ROWCOUNT来获取复杂查询返回的行数。否则,没有简单的方法可以在同一查询中获取选择每个名称的名称数量。

答案 3 :(得分:0)

你几乎做对了。

...variable definitions
set @numOfAllFoundNames = 0;
select @foundName = x.name, @numOfAllFoundNames = @numOfAllFoundNames+1
from <table_name> x where ...<complex and long>...

答案 4 :(得分:0)

这是一个很少使用的COMPUTE子句的工作:

SELECT x.name
FROM [table]
WHERE [... ]
COMPUTE COUNT(x.name)

请注意,COMPUTE已被弃用。