0

一些非常简单的事情,但我无法让它为我工作:)

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 语句两次。必须有某种方法可以在一次选择中进行组合:获取所有名称,顺便告诉我他们有多少。

谢谢

附言

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

x.name where bla1 = foo 的结果将是:

a
b
d
d
b
c

count(x.name) where 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

4

5 回答 5

2

试试这个 :

select x.name, count(x.name) over () cnt 
from <table_name> x where ...<complex and long>...
于 2012-08-08T13:40:27.113 回答
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如果名称重复,您会看到少 1 行。

于 2012-08-08T13:41:08.180 回答
0

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

于 2012-08-08T13:41:11.157 回答
0

你几乎做对了。

...variable definitions
set @numOfAllFoundNames = 0;
select @foundName = x.name, @numOfAllFoundNames = @numOfAllFoundNames+1
from <table_name> x where ...<complex and long>...
于 2012-08-08T13:41:52.880 回答
0

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

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

请注意 COMPUTE 已被弃用。

于 2012-08-08T13:43:08.147 回答