Sql server 2008 如何在不更改实际顺序的情况下从SQL列检索唯一数据?
我有一个带有guid的列,并且有重复的条目。 e、 g.可引导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
------------------------------------
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标识/创建日期列?