-1
我写一个存储过程在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.您确实意识到top 1只返回1行吗?你的小组将按行分组。删除顶部1将返回不同的行为F.Nombre和Em.Nombre –
我还建议您停止在每个表中使用名为ID的列。这是一种设计模式,很难与之合作。列名应该在每个表中保持不变。产品ID应保持不变。并将您的列命名为FK_是一个糟糕的主意。如果这不再是外键,会发生什么?您必须更新所有代码或使用名为误导性的列。将用法嵌入名称不是数据库设计的好方法。 –
是的,我知道,但是如果我删除了TOP 1,它不会将“FNombre”的不同实例组合为我。 –