SELECT DISTINCT 按字段的出现顺序对行进行排序
SELECT DISTINCT ordering rows by order of appearance of the field
我有这个数据
Id Campo
----------- ----------
1 id_recibo
2 col_2
3 col_65
4 UNDCAP
5 id_recibo
6 col_2
7 col_65
8 UNDCAP
而且我需要做类似 SELECT DISTINCT
的事情,以出现的顺序获取数据,而不是默认获取的升序。
如果我做 SELECT DISTINCT
我得到这个:
campo
--------
col_2
col_65
id_recibo
UNDCAP
这里是代码:
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
我需要的结果是这样的:
campo
----------
id_recibo
col_2
col_65
UNDCAP
我试过一些这样的,但它不起作用,因为顺序是可变的:
SELECT
A.Campo AS NuevoOrden
FROM
(SELECT DISTINCT
CAMPO
FROM
#tmp) A
ORDER BY NEWID()
我想你只是想要:
select campo
from t
group by campo
order by min(id);
我有这个数据
Id Campo
----------- ----------
1 id_recibo
2 col_2
3 col_65
4 UNDCAP
5 id_recibo
6 col_2
7 col_65
8 UNDCAP
而且我需要做类似 SELECT DISTINCT
的事情,以出现的顺序获取数据,而不是默认获取的升序。
如果我做 SELECT DISTINCT
我得到这个:
campo
--------
col_2
col_65
id_recibo
UNDCAP
这里是代码:
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
我需要的结果是这样的:
campo
----------
id_recibo
col_2
col_65
UNDCAP
我试过一些这样的,但它不起作用,因为顺序是可变的:
SELECT
A.Campo AS NuevoOrden
FROM
(SELECT DISTINCT
CAMPO
FROM
#tmp) A
ORDER BY NEWID()
我想你只是想要:
select campo
from t
group by campo
order by min(id);