我有这个查询。
我想通过仅获取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
答案 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
子句中。