Упорядочить по параметру с case-when - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть эта процедура

ALTER PROCEDURE spConsultaPorcentagem
    @usuario nvarchar(60) = NULL,
    @dataEmissao datetime,
    @dataSaida datetime,
    @ordem nvarchar(50)

AS
BEGIN

    SELECT  NFI.ID_Produto, SUM(NFI.Quantidade) AS Quantidade, MIN(PS.Descricao) AS Nome, MAX(NFI.ValorUnitario) AS Valor,
        SUM(NFI.ValorTotal) AS ValorTotal, cast(SUM(NFI.ValorTotal)*100/SUM(SUM(NFI.ValorTotal)) OVER () AS decimal(10,3)) AS Porcentagem,
        SUM(SUM(NFI.ValorTotal)) OVER() AS ValorFinal

                           // INNER JOINS

    ORDER BY 
        CASE WHEN @ordem = 'alfabetica' THEN Nome END,
        CASE WHEN @ordem = 'quantidade' THEN Quantidade END DESC,
        CASE WHEN @ordem = 'valor' THEN ValorTotal END DESC
END

, но возвращается неверное имя столбца на Nome и Имя столбца с неопределенностью на ValorTotal, Почему?

РЕДАКТИРОВАТЬ 1

Я решил это, сделав это

CASE WHEN @ordem = 'alfabetica' THEN MIN(PS.Descricao) END,
CASE WHEN @ordem = 'quantidade' THEN SUM(NFI.Quantidade) END DESC,
CASE WHEN @ordem = 'valor' THEN SUM(NFI.ValorTotal) END DESC
...