大家帮我看看这是怎么回事?(Group by有错吗?) (100分)

  • 主题发起人 whbsuper
  • 开始时间
to caidao

当性别不同时分别显示第一条记录
 
I服了U!
 
如果你用ClientDataSet,可以在客户端对数据进行过滤...
 
to stuwe

IN
((SELECT TOP 1 编号
FROM 2001info
WHERE 性別='男')
UNION
(SELECT TOP 1 编号
FROM 2001info
WHERE 性別='女'))
提示:语句中有语法错误

top 1什么意思?
 
看來我也服了U!!
 
你如果直接加到SQL里当然有错了。
 
top 1 就是查出第一條記錄

如果你是sql ﹐執行有語法錯誤的話﹐那我也沒辦法
我測試是肯定通過的
 
SELECT TOP 1 *
FROM info
WHERE 性別 = '男'

UNION

SELECT TOP 1 *
FROM info
WHERE 性別 = '女'
 
靠!看了这么一堆人在这里讨论这么简单问题!

使用Group By 的时候 Select 中的字段必须包含聚积函数,也就是说要包含Sum,Count,Max,Min,Avg等函数


 
to liu_liu

谁说的一定要有Sum,Count,Max,Min,Avg等这些函数的,我看你是更不懂,加了这些也未必就能对?
 
可能跟你使用的数据库不现,我在pardox上用sql搞了很久,后来换了其它的数据表,我也跟你一样
是在foxpro中试过,但在delphi中就是不行.
 
to whbsuper,
语句应该没有问题的

 
用Group by 语句前面必须是聚合函数的如:sum(),count(),avg()
 
如果你的这个ADOQUERY在设计时是开着的话(并且已经指定了SQL,比如说 SELECT * FROM。。。)
那这个问题我碰见过,我最终这样解决的, 将这个ADOQUERY控件删了, 再重新增加一个ADOQUERY,并不激活它,在程序运行
时,再改变它的属性。 问题就再也没出现了,我的SQL语言同楼主的基本上是一样的,报错也是一样的。

试试吧。
 
同意liu_liu,
服了楼主
 
Group By 子句:

指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总值。
指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,
或者 GROUP BY 表达式必须与选择列表表达式完全匹配。

说明 如果未指定 ORDER BY 子句,则使用 GROUP BY 子句不按任何特定的顺序返回组。
建议始终使用 ORDER BY 子句指定具体的数据顺序。

语法
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]

参数
ALL

包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。
如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE 或 ROLLUP 运算符指定 ALL。

如果访问远程表的查询中有 WHERE 子句,则不支持 GROUP BY ALL 操作。

group_by_expression

是对其执行分组的表达式。group_by_expression 也称为分组列。
group_by expression 可以是列或引用列的非聚合表达式。
在选择列表内定义的列的别名不能用于指定分组列。

说明 text、ntext 和 image 类型的列不能用于 group_by_expression。

对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、
聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。
如果指定了 CUBE 或 ROLLUP,则最多只能有 10 个分组表达式。

CUBE

指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。
在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。
GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。
使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。

结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。
GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,
并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,
因此不论指定分组列时所使用的是什么顺序,行数都相同。

ROLLUP

指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。
按层次结构顺序,从组内的最低级别到最高级别汇总组。
组的层次结构取决于指定分组列时所使用的顺序。
更改分组列的顺序会影响在结果集内生成的行数。


重要 使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、
COUNT(DISTINCT column_name) 和 SUM(DISTINCT column_name)。
如果使用这类聚合,SQL Server 将返回错误信息并取消查询。
 
顶部