как бы группа по запросу SQL, как это - PullRequest
2 голосов
/ 25 октября 2011

У меня есть этот запрос.

Я хотел бы сгруппировать результат, получив только userid и albumtemplateid, но и столбец cardtenplateid. Мне бы хотелось получить одно из многих значений, которые есть в столбце.

Select 
   UserID, 
   CardTemplateID, 
   AlbumTemplateID
from vwCardsPerUser 

Я не знаю, дал ли я ясность, но вот пример:

userid cardtemplateid albumtemplateid
1 3 1
2 2 1
17 1
3 3 2

так что результат будет:
идентификатор пользователяtemplateid albumtemplateid
1 3 1
2 2 1
3 3 2

Ответы [ 3 ]

2 голосов
/ 25 октября 2011
    Select  UserID , max(CardTemplateID) as CardTemplateID
    ,AlbumTemplateID  
from vwCardsPerUser
    group by UserID, AlbumTemplateID

используйте max или min для cardtemplateid и группируйте по userid и albumtemplateid ... это будет работать нормально ....

2 голосов
/ 25 октября 2011

Поскольку вы не указали, какое "одно из многих" cardtemplateid значений вы хотите вернуть, я произвольно выбрал минимальное значение.

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

РЕДАКТИРОВАТЬ На основе вопроса в комментарии это обрабатывает случай, когда cardtemplateid является типом данных уникального идентификатора:

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 голос
/ 25 октября 2011

Это можно сделать с помощью следующего запроса .:

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

Агрегатная функция MAX, примененная к CardTemplateID, позволяет ему участвовать в этом запросе.Вам нужно использовать статистическую функцию для столбца, потому что она отсутствует в предложении GROUP BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...