如何通过SQL查询这样的组

时间:2011-10-25 17:45:30

标签: sql sql-server sql-server-2005

我有这个查询。

我想通过仅获取userid和albumtemplateid对结果进行分组,但是我希望获得该列所具有的许多值之一的cardtenplateid列。

Select 
   UserID, 
   CardTemplateID, 
   AlbumTemplateID
from vwCardsPerUser 

我不知道我是否清楚自己,但这是一个例子:

userid cardtemplateid albumtemplateid
1 3 1
2 2 1
1 7 1
3 3 2

所以结果将是:
userid cardtemplateid albumtemplateid
1 3 1
2 2 1
3 3 2

3 个答案:

答案 0 :(得分:2)

由于您没有指定要返回的“许多”cardtemplateid值中的哪一个,我随意选择了最小值。

SELECT userid, albumtemplateid, MIN(cardtemplateid)
    FROM vwCardsPerUser
    GROUP BY userid, albumtemplateid;

编辑根据评论中的问题,处理cardtemplateid是uniqueidentifier数据类型的情况:

WITH cteCards AS (
    SELECT userid, albumtemplateid, cardtemplateid,
           ROW_NUMBER() OVER(PARTITION BY userid, albumtemplateid ORDER BY cardtemplateid) AS RowNum
        FROM vwCardsPerUser
)
SELECT userid, albumtemplateid, cardtemplateid
    FROM cteCards
    WHERE RowNum = 1;

答案 1 :(得分:2)

    Select  UserID , max(CardTemplateID) as CardTemplateID
    ,AlbumTemplateID  
from vwCardsPerUser
    group by UserID, AlbumTemplateID

在cardtemplateid上使用max或min,按用户ID和albumtemplateid分组...这样可以正常使用....

答案 2 :(得分:1)

您可以使用以下查询执行此操作:

SELECT UserID AS userid, 
       MAX(CardTemplateID) AS cardtemplateid, 
       AlbumTemplateID AS albumtemplateid
FROM vwCardsPerUser 
GROUP BY userid, albumtemplateid

应用于CardTemplateID的MAX聚合函数允许它参与此查询。您需要在列上使用聚合函数,因为它不在GROUP BY子句中。