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
其实就是求一个——”通用的“自定义聚合函数,功能是实现根据一组值产生任意值。 展开
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
其实就是求一个——”通用的“自定义聚合函数,功能是实现根据一组值产生任意值。 展开
2个回答
展开全部
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;
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没有的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询