Sql server 2008 如何在不更改实际顺序的情况下从SQL列检索唯一数据?

Sql server 2008 如何在不更改实际顺序的情况下从SQL列检索唯一数据?,sql-server-2008,Sql Server 2008,我有一个带有guid的列,并且有重复的条目。 e、 g.可引导 guid ------------------------------------ 7AAB93D4-3DAC-46F4-8E2A-2D43EF4033A0 E753EBF7-3A13-4D25-B1BE-65BAD17F7097 B9C61AAF-A625-4BF8-9BA8-8C4EFDA9E53B B563F832-16A7-4F17-91C1-D9C5672DDB3E **9FF90E75-16DD-4B01-9

我有一个带有guid的列,并且有重复的条目。 e、 g.可引导

guid
------------------------------------
7AAB93D4-3DAC-46F4-8E2A-2D43EF4033A0 

E753EBF7-3A13-4D25-B1BE-65BAD17F7097 

B9C61AAF-A625-4BF8-9BA8-8C4EFDA9E53B

B563F832-16A7-4F17-91C1-D9C5672DDB3E

**9FF90E75-16DD-4B01-9A1D-5BEB20564C63**

**9FF90E75-16DD-4B01-9A1D-5BEB20564C63**
如果我表演 从GuidTable结果中选择不同的guid

guid
-------------
7AAB93D4-3DAC-46F4-8E2A-2D43EF4033A0

9FF90E75-16DD-4B01-9A1D-5BEB20564C63

E753EBF7-3A13-4D25-B1BE-65BAD17F7097

B9C61AAF-A625-4BF8-9BA8-8C4EFDA9E53B

B563F832-16A7-4F17-91C1-D9C5672DDB3E
在这里,检索到的数据的顺序被更改,即不是表中的实际顺序

如何克服这个问题? 我需要具有不同guid的非排序数据(应该与表顺序相同)


非常感谢……)在这里输入代码

首先,没有排序表这样的东西。查询优化器可以以任何顺序检索数据,特别是在涉及并行执行时。保证订单的唯一方法是使用
orderby
子句。如果表中有如下列:
ID-IDENTITY
或创建日期,则可以使用它对结果集进行排序

如果没有,您可以创建“半行编号”:

CREATE TABLE #GuidTable(guid UNIQUEIDENTIFIER);

INSERT INTO #GuidTable(guid)
VALUES
('7AAB93D4-3DAC-46F4-8E2A-2D43EF4033A0'),
('E753EBF7-3A13-4D25-B1BE-65BAD17F7097'),
('B9C61AAF-A625-4BF8-9BA8-8C4EFDA9E53B'),
('B563F832-16A7-4F17-91C1-D9C5672DDB3E'),
('9FF90E75-16DD-4B01-9A1D-5BEB20564C63'),
('9FF90E75-16DD-4B01-9A1D-5BEB20564C63');

SELECT *, rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1))
INTO #temp
FROM #GuidTable;

SELECT guid, MAX(rn) as rn
FROM #temp
GROUP BY guid
ORDER BY rn;

警告!如果未按顺序提取数据,则可能无法保留顺序。正如我前面所写的,您需要另一个列来进行排序。

首先,没有排序表这样的东西。查询优化器可以以任何顺序检索数据,特别是在涉及并行执行时。保证订单的唯一方法是使用
orderby
子句。如果表中有如下列:
ID-IDENTITY
或创建日期,则可以使用它对结果集进行排序

如果没有,您可以创建“半行编号”:

CREATE TABLE #GuidTable(guid UNIQUEIDENTIFIER);

INSERT INTO #GuidTable(guid)
VALUES
('7AAB93D4-3DAC-46F4-8E2A-2D43EF4033A0'),
('E753EBF7-3A13-4D25-B1BE-65BAD17F7097'),
('B9C61AAF-A625-4BF8-9BA8-8C4EFDA9E53B'),
('B563F832-16A7-4F17-91C1-D9C5672DDB3E'),
('9FF90E75-16DD-4B01-9A1D-5BEB20564C63'),
('9FF90E75-16DD-4B01-9A1D-5BEB20564C63');

SELECT *, rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1))
INTO #temp
FROM #GuidTable;

SELECT guid, MAX(rn) as rn
FROM #temp
GROUP BY guid
ORDER BY rn;

警告!如果未按顺序提取数据,则可能无法保留顺序。正如我前面所写,您需要另一列进行排序。

使用ORDER BY对结果进行排序我不需要定制的订单。。我需要的是它在表中的顺序,结果是不同的。你知道没有所谓的顺序表吗?排序结果的唯一一件事是按ORDER BYclauseThanks for reply..但我应该从表中获取数据,因为它没有重复的行…我观察到不同的关键字改变了行的顺序..关键是我不需要任何显式排序..您知道查询优化器可以以任何顺序检索数据或使用并行处理吗?订单不能保证。表中是否有ID IDENTITY/create date列?使用ORDER BY对结果进行排序不需要自定义订单。。我需要的是它在表中的顺序,结果是不同的。你知道没有所谓的顺序表吗?排序结果的唯一一件事是按ORDER BYclauseThanks for reply..但我应该从表中获取数据,因为它没有重复的行…我观察到不同的关键字改变了行的顺序..关键是我不需要任何显式排序..您知道查询优化器可以以任何顺序检索数据或使用并行处理吗?订单不能保证。表中是否有ID标识/创建日期列?