非常简单,但我无法让它为我工作:)
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
答案 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 name
将count
应用于集合中的每个不同的名称 - 例如。如果重复名称,你会看到少一行和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已被弃用。