Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server分组依据和第一个_Sql Server_Group By - Fatal编程技术网

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()在分组之前返回此特定查询中的第一次出现。