获得鲜明的前1列在SQL Server

获得鲜明的前1列在SQL Server

问题描述:

我写一个存储过程在SQL Server 2014的项目,我有这样的代码:获得鲜明的前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 

但我只得到“Ganancia”的顶部1,但我想在“F.Nombre”一栏中为每个不同的值得到它。我如何修改查询?

+1

删除顶部1.您确实意识到top 1只返回1行吗?你的小组将按行分组。删除顶部1将返回不同的行为F.Nombre和Em.Nombre –

+0

我还建议您停止在每个表中使用名为ID的列。这是一种设计模式,很难与之合作。列名应该在每个表中保持不变。产品ID应保持不变。并将您的列命名为FK_是一个糟糕的主意。如果这不再是外键,会发生什么?您必须更新所有代码或使用名为误导性的列。将用法嵌入名称不是数据库设计的好方法。 –

+0

是的,我知道,但是如果我删除了TOP 1,它不会将“FNombre”的不同实例组合为我。 –

您正在检索最高记录,因为您使用Top 1条款,你相信!

所以删除其与

Group by 

将显示结果为不同的。