Erro Consulta SQL Server - ORDER BY items must appear in the select list if SELECT DISTINCT is specified

Olá, bom dia

Estou fazendo a consulta abaixo e não consigo ordenar a data, retorna o seguinte erro:
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

Algumas observações:

  1. Quando eu removo o “DISTINCT”, a consulta é concluída com sucesso.

  2. Alterei a data para o formato “DD/MM/YYYY”.

  3. Agrupei as colunas para tentar solucionar (comentado na query abaixo), porém o erro persistiu.

    SELECT DISTINCT
    RG.EMP_COD_DESCR_X as Empresa
    ,RG.CHAPA_X as Chapa
    ,RG.PFIS_NOME_X as Servidor
    ,convert (nvarchar(30), RG.DT_COMP_X, 103) as Competência
    ,RG.EVEN_COD_X as Evento_Cod
    ,RG.VLR_X as Valor
    FROM [SQL_GRH_ODS_LINKED].[GRH_2015].[dbo].[GMS_RELATORIO_GERAL] RG
    where RG.EVEN_COD_X IN (‘380’, ‘20380’)
    – group by RG.EMP_COD_DESCR_X, RG.CHAPA_X, RG.PFIS_NOME_X, RG.DT_COMP_X, RG.EVEN_COD_X, RG.VLR_X
    order by 1, 3, RG.DT_COMP_X;

A mensagem diz que, se o select está usando distinct, as colunas presentes no order by também precisam estar presentes no select (individualmente, pelo que entendo).

Adicione a coluna RG.DT_COMP_X no select (mesmo ela estando presente no convert). Algo como:

SELECT DISTINCT
RG.EMP_COD_DESCR_X as Empresa
,RG.CHAPA_X as Chapa
,RG.PFIS_NOME_X as Servidor
,RG.DT_COMP_X
,convert (nvarchar(30), RG.DT_COMP_X, 103) as Competência
,RG.EVEN_COD_X as Evento_Cod
,RG.VLR_X as Valor
FROM [SQL_GRH_ODS_LINKED].[GRH_2015].[dbo].[GMS_RELATORIO_GERAL] RG
where RG.EVEN_COD_X IN (‘380’, ‘20380’)
– group by RG.EMP_COD_DESCR_X, RG.CHAPA_X, RG.PFIS_NOME_X, RG.DT_COMP_X, RG.EVEN_COD_X, RG.VLR_X
order by 1, 3, RG.DT_COMP_X;

Abraço.

Bom dia!

Primeiramente, obrigado pela ajuda!
Pois então, realmente ao inserir a DT_COMP_X no SELECT, a consulta é concluída, porém o intuito seria deixar apenas a coluna da forma convertida, não queria manter duas colunas com datas.
Nesse caso, acha que não seria posssível?

Não podes manter a posição no order by como os restantes?

ORDER BY 1, 3, 4

Na verdade eu nem quero manter a coluna “RG.DT_COMP_X” no SELECT, preciso apenas ordenar por esse campo.

O campo que eu preciso no relatório seria esse, porém convertido para ‘DD/MM/YYYY’, ou seja: ,convert (nvarchar(30), RG.DT_COMP_X, 103) as Competência

Ah, ok, é um campo data e a conversão dele para string não faz sentido de ordenar.

Na realidade, essa conversão não deveria ser reponsabilidade da BD mas sim da camada de apresentação. A tua query SQL deveria devolver a data normalmente, como um date e seria responsabilidade de quem apresenta os dados formatar essa data.

Se queres manter como tens, a formatar a data na BD e ordenar por essa coluna, terás sempre de ter a coluna original na query SQL para ordenar.

Ah, ok, é um campo data e a conversão dele para string não faz sentido de ordenar.
→ Isso amigo, exato!

Entendi, ta certo então.
Obrigado pela explicação.