sql:用group by分组后,每组随意取一个记录?

如题,建立对某表分组视图,想在视图结果中显示一个既不是分组列也不适合用聚合函数的列,结果中该列的值可以是原分组中该列任意一行的值(注意:不是强调是随机值),主要原因是缺乏... 如题,建立对某表分组视图,想在视图结果中显示一个既不是分组列也不适合用聚合函数的列,结果中该列的值可以是原分组中该列任意一行的值(注意:不是强调是随机值),主要原因是缺乏一个根据一组值随意产生一个值的聚合函数。
sql 语句如下:
SELECT 楼栋id, MAX(层高) AS 层高, SUM(建筑面积) AS 建筑面积, 随意聚合函数(楼栋名称),
随意聚合函数(管理人员联系方式)
FROM dbo.进阶视图_楼栋对用房单位
GROUP BY 楼栋id

本人使用的是sql server 2000,如各位有能实现以上功能的自定义函数,请不吝指教。
下面是我的解决方案,每次需要针对条件单独设计函数,效率也很低。
CREATE FUNCTION 根据楼栋id产生楼栋名称 (@楼栋id int)
RETURNS varchar(50) AS
BEGIN
declare @Str varchar(50)
set @Str = ''
select top 1 @Str = [楼栋名称] from 进阶视图_楼栋对用房单位
where [楼栋id] = @楼栋id
return @Str
END
其实就是求一个——”通用的“自定义聚合函数,功能是实现根据一组值产生任意值。
展开
 我来答
tj_angela
2014-06-16 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2581万
展开全部
select 楼栋id,楼栋名称,管理人员联系方式,层高,面积
from (
select 楼栋id,楼栋名称,管理人员联系方式,row_number() over(partition by 楼栋id order by 层高 desc) rn,层高,SUM(建筑面积) OVER(PARTITION BY 楼栋id) as 面积
from dbo.进阶视图_楼栋对用房单位
) a
where rn=1;
更多追问追答
追问
over无法识别,丢失from子句。
row_number() over(partition by COL )as rn

在什么环境下可以用啊?
我是sql server 2000
追答
2005以上才有的函数,
2000没有的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
29882942
2014-06-16 · 超过33用户采纳过TA的回答
知道答主
回答量:180
采纳率:0%
帮助的人:65.8万
展开全部
如果想写一个对所有表都能适用的自定义函数,有些困难,但如果只针对某一个表,可以用一个输入参数表示是哪个字段,在函数内部用IF .... else 来判断
追问
就是求一个——”通用的“自定义聚合函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式