2015-10-05 5 views
1

имеют два SQL-выборки в одной таблице. 1-й выбор Показывает желаемые пользовательские данные. Второй выбор определяет, сколько раз используются «инициалы». Это значение, как правило, используется несколько раз, хотя это не должноОбъединить два SQL-запроса в один результат.

Я не хочу иметь меньше строк, как в запросе 1, но добавить «Initial граф на всех»

- первый запрос, показывающий все желаемое данные

SELECT 
    UserID, Username, Initials 
FROM  
    dbo.Users 

Этот запрос может графа Initaials

SELECT 
    Initials, count(*) as InitialCount 
FROM  
    dbo.Users 
GROUP BY 
    Initials 

Выход:

UserID | Username | Initals | Initialcount 
----------------------------------------------  
    1 | Peter Pan |  PP | 2 
    2 | Paul Pax |  PP | 2 
    3 | John Doe |  JD | 1 
+1

Какую версию SQL Server вы используете? –

ответ

5

Вы можете использовать COUNT() с OVER(), чтобы получить количество в каждой группе (определяется PARTITION BY) без GROUP BY:

SELECT 
    UserID 
    , Username 
    , Initials 
    , COUNT(*) OVER(PARTITION BY Initials) AS InitialCount 
FROM  
    dbo.Users 

Обычно называют аналитическими или функций окна OVER() можно использовать с агрегатными функциями, как MIN() , MAX(), SUM() и т.д.

0
SELECT UserID, Username, Inititials, 
(SELECT COUNT(*) FROM dbo.Users U2 WHERE U2.Inititals = U1.Initials) InitialCount 
FROM dbo.Users U1 
0

Так попробуйте использовать ключевое слово различны в зависимости от данные, которые вам могут понадобиться для самостоятельного присоединения. Я просто изучаю SQL, поэтому я могу быть не прав.

SELECT DISTINCT UserID, Username, Initials, count(Initials) as InitialCount 
FROM  dbo.Users 
GROUOP BY UserID 
+0

Я не думаю, что вы можете сделать DISTINCT и GROUP BY в одном заявлении. GROUP BY по сути делает для вас отличную операцию. –

Смежные вопросы