Skip to content
Advertisement

SELECT DISTINCT ordering rows by order of appearance of the field

I have this data

Id          Campo
----------- ----------
1           id_recibo
2           col_2
3           col_65
4           UNDCAP
5           id_recibo
6           col_2
7           col_65
8           UNDCAP

And I need to do something like SELECT DISTINCT obtaining the data in order of appearance and not in the ascending order by default that is obtained.

If I do a SELECT DISTINCT I get this:

campo
--------
col_2
col_65
id_recibo
UNDCAP

Here the code:

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL 
     DROP TABLE #tmp

CREATE TABLE #tmp
(
    Id INT IDENTITY,
    Campo VARCHAR(MAX)
)

INSERT INTO #tmp (Campo)
VALUES ('id_recibo'), ('col_2'), ('col_65'), ('UNDCAP'),
       ('id_recibo'), ('col_2'), ('col_65'), ('UNDCAP')

SELECT * FROM #tmp

SELECT DISTINCT campo FROM #tmp 

The result I need is like this:

campo
----------
id_recibo
col_2
col_65
UNDCAP

I tried some like this, but It doesn’t work, because the order is variable:

SELECT 
    A.Campo AS NuevoOrden
FROM
    (SELECT DISTINCT 
         CAMPO
     FROM 
         #tmp) A
ORDER BY NEWID()

Advertisement

Answer

I think you just want:

select campo
from t
group by campo
order by min(id);
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement