Member 13932549 Ответов: 2

У меня есть пример таблицы сотрудников с различными отделами теперь сценарий должен отображать самые высокие повторяющиеся отделы в таблице сотрудников со всеми столбцами


-->INPUT:
empid department  names    salary
1	dotnet	    klrahul	     1000
2	dotnet	    dhawan	     2000
3	dotnet	    virat	     1500
4	design	    dhoni	     3000
5	design	    karthik	     2000
6	design	    phant	     3040
7	php	        chawal	     4000
8	php	        kpandya	     2000
9	php	        skaual	     4300
10	php	        bhumra	     2000
11	dotnet	    vijay	     1646

-->OUTPUT:
empid   department  names   salary
1	dotnet	    klrahul	     1000
2	dotnet	    dhawan	     2000
3	dotnet	    virat	     1500
11	dotnet	    vijay	     1646
7	php	        chawal	     4000
8	php	        kpandya	     2000
9	php	        skaual	     4300
10	php	        bhumra	     2000


Что я уже пробовал:

Я попробовал сгруппировать предложение having, но я не могу получить все столбцы, может ли кто-нибудь помочь мне с запросом SQL Server 2012.

2 Ответов

Рейтинг:
2

OriginalGriff

Group by не предназначена для "всех записей" - это функция агрегирования.
Видеть здесь: SQL GROUP By и ошибка "имя столбца недопустимо в списке выбора, потому что..." [^] и это все объясняет.
Вероятно, вам придется использовать GROUP BY с функциями агрегации, такими как COUNT и MAX, вместе с JOIN, чтобы выбрать нужные записи.
Начните с написания GROUP by, чтобы вернуть нужные вам названия отделов - это довольно просто, - а затем добавьте их в соединение, чтобы получить нужные строки.


Рейтинг:
1

Richard Deeming

Предполагая, что Microsoft SQL Server, что-то вроде этого должно работать:

SELECT TOP 1 WITH TIES
    empid,
    department,
    names,
    salary
FROM
    YourTable
ORDER BY
    COUNT(1) OVER (PARTITION BY department) DESC
;