Sql server SQL Server分组依据和第一个
我有很多画廊的物品。我有很多照片。这些画在画廊里 我想创建一个视图,在其中列出库和库中第一张图片的一些属性 比如:Sql server SQL Server分组依据和第一个,sql-server,group-by,Sql Server,Group By,我有很多画廊的物品。我有很多照片。这些画在画廊里 我想创建一个视图,在其中列出库和库中第一张图片的一些属性 比如: ALTER VIEW [foto].[gallery_with_picture] AS select main.* ,FIRST(pics.[picture_id]) ,FIRST(pics.[picture_width]) ,FIRST(pics.[picture_height]) ,FIR
ALTER VIEW [foto].[gallery_with_picture]
AS
select
main.*
,FIRST(pics.[picture_id])
,FIRST(pics.[picture_width])
,FIRST(pics.[picture_height])
,FIRST(pics.[URLPart] as picture_url_part)
,FIRST(pics.[Extension] as picture_extension)
from
[v_gallery] main
left join [v_picture_recursive] pics on main.[foto_reference_picture_group_modeling_object/obj_id] = pics.woc_root
group by
main.*
order by
pics.[picture_id]
当然,这不起作用,因为SQL Server对此没有可用的第一个聚合函数。还是这样
或者我应该使用top1进行内部选择,因为没有更简单的解决方案?这里有一种方法
ALTER VIEW [foto].[gallery_with_picture]
AS
SELECT main.*, /*But best to list columns explicitly*/
pics.[picture_id],
pics.[picture_width],
pics.[picture_height],
pics.[URLPart] AS picture_url_part,
pics.[Extension] AS picture_extension
FROM [v_gallery] main
OUTER APPLY
(SELECT TOP 1 *
FROM [v_picture_recursive] pics
WHERE main.[foto_reference_picture_group_modeling_object/obj_id] =
pics.woc_root
ORDER BY pics.[picture_id]) pics
还是别的
ALTER VIEW [foto].[gallery_with_picture]
AS
WITH pics AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY woc_root
ORDER BY [picture_id]) RN
FROM [v_picture_recursive])
SELECT main.*,
pics.[picture_id],
pics.[picture_width],
pics.[picture_height],
pics.[URLPart] AS picture_url_part,
pics.[Extension] AS picture_extension
FROM [v_gallery] main
LEFT JOIN pics
ON main.[foto_reference_picture_group_modeling_object/obj_id] =
pics.woc_root
AND RN = 1
SQL表中没有固有的顺序。您需要指定如何定义订单。这是正确的。我希望获得具有最小id的图片。但我还希望FIRST()在分组之前返回此特定查询中的第一次出现。