-1
に明確なトップ1列を取得します。私は、SQL Server 2014年のプロジェクトのためのストアドプロシージャを書いていますし、私はこのコードを持っている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は1行だけを返します。あなたのグループは、行をセットにグループ化します。トップ1を削除すると、F.NombreとEm.Nombreの別個の行が返されます –
すべてのテーブルでIDという名前の列の使用をやめることをお勧めします。これは作業に苦労するデザインパターンです。列名は、すべてのテーブルで同じままにする必要があります。 ProductIDは変更されません。そして列をFK_と命名するのは悪い考えです。それがもはや外部キーではない場合はどうなりますか?すべてのコードを更新するか、誤解を招くような名前の列を使用する必要があります。名前に使用法を組み込むことは、データベース設計にとっては良いアプローチではありません。 –
はい、知っていますが、TOP 1を削除しても、「F.Nombre」の別のインスタンスでグループ化されません。 –