我有一个带guid的列,并且有重复的条目。 例如GuidTable
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的非排序数据(应该与表顺序相同)。
非常感谢提前.. :)在这里输入代码
答案 0 :(得分:0)
首先,没有有序表这样的东西。查询优化器可以按任何顺序检索数据,尤其是涉及并行执行时。保证订单的唯一方法是使用ORDER BY
子句。如果您的表格中包含以下列:ID IDENTITY
或创建日期,则可以使用它来订购结果集。
如果没有,您可以创建“半行号”:
<强> Demo 强>
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;
警告!如果未按顺序提取数据,则可能无法保留订单。正如我之前所写,您需要另一列进行订购。