这是我的表:
DocumentTypeId DocumentType UserId CreatedDtm
--------------------------------------------------------------------------
2d47e2f8-4 PDF 443f-4baa 2015-12-03 17:56:59.4170000
b4b-4803-a Images a99f-1fd 1997-02-11 22:16:51.7000000
600-0e32 XL e60e07a6b 2015-08-19 15:26:11.4730000
40f8ff9f Word 79b399715 1994-04-23 10:33:44.2300000
8230a07c email 750e-4c3d 2015-01-10 09:56:08.1700000
如何在DocumentType=email
位置(3rd
)上移动最后一行(before DocumentType=XL
)而不更改表值?
答案 0 :(得分:0)
不希望否认其他人在此处所说的真相,SQL Server确实具有CLUSTERED索引。有关这些以及群集表与非群集表之间差异的完整详细信息,请参阅here。实际上,群集表确实以索引顺序将数据写入磁盘。但是,由于后续的插入和删除,您不应该依赖任何给定的记录处于固定的序数位置。
要让您的数据显示第三个电子邮件和XL第四个,您只需要通过CreatedDtm订购。因此:
declare @test table
(
DocumentTypeID varchar(20),
DocumentType varchar(10),
UserID varchar(20),
CreatedDtm datetime
)
INSERT INTO @test VALUES
('2d47e2f8-4','PDF','443f-4baa','2015-12-03 17:56:59'),
('b4b-4803-a','Images','a99f-1fd','1997-02-11 22:16:51'),
('600-0e32','XL','e60e07a6b','2015-08-19 15:26:11'),
('40f8ff9f','Word','79b399715','1994-04-23 10:33:44'),
('8230a07c','email','750e-4c3d','2015-01-10 09:56:08')
SELECT * FROM @test order by CreatedDtm
这给出了一个结果集:
40f8ff9f Word 79b399715 1994-04-23 10:33:44.000
b4b-4803-a Images a99f-1fd 1997-02-11 22:16:51.000
8230a07c email 750e-4c3d 2015-01-10 09:56:08.000
600-0e32 XL e60e07a6b 2015-08-19 15:26:11.000
2d47e2f8-4 PDF 443f-4baa 2015-12-03 17:56:59.000
这可能是你正在寻找的,但我不能强调,它只在这种特殊情况下给出了第3和第4的电子邮件。如果日期不同,那就不一样了。但也许,这就是你所需要的一切?
答案 1 :(得分:0)
我认为您需要按DocumentType
列排序。
加入一个临时表,其中可能包含DocumenTypes
虚拟SortOrder
,您可以获得所需的结果。
declare @tbl table(
DocumentTypeID varchar(50),
DocumentType varchar(50)
)
insert into @tbl(DocumentTypeID, DocumentType)
values
('2d47e2f8-4','PDF'),
('b4b-4803-a','Images'),
('600-0e32','XL'),
('40f8ff9f','Word'),
('8230a07c','email')
;
--this will give you original output
select * from @tbl;
--this will output rows with new sort order
select t.* from @tbl t
inner join
(
select *
from
(values
('PDF',1, 1),
('Images',2, 2),
('XL',3, 4),
('Word',4, 5),
('email',5, 3) --here I put new sort order '3'
) as dt(TypeName, SortOrder, NewSortOrder)
) dt
on dt.TypeName = t.DocumentType
order by dt.NewSortOrder
答案 2 :(得分:-1)
行位置在SQL表格中并不重要,因为它是所有无序数据集,但如果您真的想要切换行,我建议您将所有数据发送到临时表,例如,
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.github.paolorotolo:appintro:4.0.0'
compile 'com.google.firebase:firebase-core:11.0.4'
compile 'com.google.firebase:firebase-database:11.0.4'
compile 'com.google.firebase:firebase-auth:11.0.4'
compile 'com.android.support:design:25.3.1'
compile 'com.google.android.gms:play-services-maps:11.0.4'
testCompile 'junit:junit:4.12'
然后删除/截断该表中的数据(如果它不会弄乱它所连接的其他表)并使用您所插入的临时表,因为它&# 39; ll具有与原始数据相同的所有相同字段。