2016-11-30 1 views
-1

Я пишу хранимую процедуру для проекта в SQL Server 2014 и у меня есть этот код:Получить Distinct топ 1 столбцов в SQL Server

ALTER PROCEDURE FOF_MejorVendedor 
AS 
BEGIN 
    SELECT TOP 1 
     F.Nombre, Em.Nombre, (P.Precio * CA.Cantidad) as 'Ganancia' 
    FROM 
     dbo.FO_Carrito CA 
    JOIN 
     dbo.FO_Solicitud S on S.ID = CA.FK_SolicitudC 
    JOIN 
     dbo.FO_Recibo R ON R.FK_Solicitud = S.ID 
    JOIN 
     dbo.FO_Productos P ON P.ID = CA.FK_ProductosC 
    JOIN 
     dbo.FO_Cliente C ON C.ID = S.FK_Cliente 
    JOIN 
     dbo.FO_Estante E ON E.FK_Producto = P.ID 
    JOIN 
     dbo.FO_PasilloXDepartamento PD ON PD.FK_Estante = E.NumeroEstante 
    JOIN 
     dbo.FO_Encargado En ON En.ID = PD.FK_Encargado 
    JOIN 
     dbo.FO_Empleado Em ON Em.ID = En.FK_EmpleadoE 
    JOIN 
     dbo.FO_Departamento D ON D.ID = PD.FK_Departamento 
    JOIN 
     dbo.FO_Ferreteria F ON D.FK_Ferreteria = F.ID 
    JOIN 
     dbo.FO_EmpleadosXFerreteria EF ON EF.FK_Ferreterias = F.ID 
    GROUP BY 
     F.Nombre, Em.Nombre, (P.Precio * CA.Cantidad) 
    ORDER BY 
     Ganancia DESC 
END 

Но я только получаю Top 1 из «Ganancia», но Я хочу получить его для каждого отдельного значения в столбце «F.Nombre». Как изменить запрос?

+1

Удалить верх 1. Вы понимаете, что верхняя часть 1 возвращает только 1 строку вправо? Ваша группа будет группировать строки в группы. Удаление вершины 1 приведет к возврату отдельных строк для F.Nombre и Em.Nombre –

+0

Я также предлагаю вам прекратить использование столбца с именем ID в каждой таблице. Это шаблон дизайна, с которым сложно работать. Имя столбца должно оставаться неизменным в каждой таблице. ProductID должен оставаться неизменным. Именование ваших столбцов как FK_ - плохая идея. Что произойдет, если это уже не внешний ключ? Вам либо нужно обновить весь свой код, либо жить с помощью столбца, который называется обманчивым. Внедрение использования в имя не является хорошим подходом к проектированию базы данных. –

+0

Да, я знаю, но если я удалю TOP 1, он не группирует меня по отдельным экземплярам «F.Nombre» –

ответ

0

Вы извлекаете верхнюю запись, потому что используете пункт Top 1, действительно ли повернули!

так удалить его и

Group by 

покажет результат, как различны.

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