2013-11-20 77 views
0

我的查询有问题。在SQL Server 2008中排序

我需要基于创建日期和图像位置列对记录进行排序。

哪里有我的表格如下

'--------------------------------- ------------------------
Id |图像类型|创建Dt |图像位置|
'----------------------------------------------- ----------
1 * |原始图像 |2013-11-20 17:27:06.380 | |
2 * |原始图像 |2013-11-20 17:27:07.380 | |
3 * | * Blank_Image * |2013-11-20 17:27:08.380 | |
4 * |原始图像 |2013-11-20 17:27:09.380 | |
'--------------------------------------------- ------------

现在,如果我用

整理[创建DT],[图片位置] 然后我得到正确

现在我想改变图像位置4到图像位置1和图像ID 1到图像位置3

'--------------------------------------------- ------------
Id |图像类型|创建Dt |图像位置|
'----------------------------------------------- ----------
1 * |原始图像 |2013-11-20 17:27:06。380 | |
2 * |原始图像 |2013-11-20 17:27:07.380 | |
3 * | * Blank_Image * |2013-11-20 17:27:08.380 | |
4 * |原始图像 |2013-11-20 17:27:09.380 | |
'--------------------------------------------- ------------

现在我的期望输出应该是

“------------------- --------------------------------------
Id |图像类型|创建Dt |图像位置|
'----------------------------------------------- ----------
4 * |原始图像 |2013-11-20 17:27:09.380 | |
2 * |原始图像 |2013-11-20 17:27:07.380 | |
3 * | * Blank_Image * |2013-11-20 17:27:08.380 | |
1 * |原始图像 |2013-11-20 17:27:06。380 | |
'--------------------------------------------- ------------

但这里在这种情况下,如果我使用

整理[创建DT],[图片位置] 它给我

'----------------------------------------- ----------------
Id |图像类型|创建Dt |图像位置|
'----------------------------------------------- ----------
1 * |原始图像 |2013-11-20 17:27:06.380 | |
2 * |原始图像 |2013-11-20 17:27:07.380 | |
3 * | * Blank_Image * |2013-11-20 17:27:08.380 | |
4 * |原始图像 |2013-11-20 17:27:09.380 | |
'--------------------------------------------- ------------

我无法解释这个比这更..如果有人能理解这一点,请帮助我。

在此先感谢。

+0

这是什么,你居然要与此有关。你想要的数据似乎不是按日期或图像位置排序? – Mithrandir

+0

我想根据图像位置对所有原始图像进行排序,但同时我希望所有空白图像都应该在创建的dt上排序。这可能吗?对不起,这有点复杂。 –

+0

我不认为你想要什么可以通过简单的日期和位置排序来完成。 – Mithrandir

回答

3

由于您先对CreatedDate进行排序,然后对ImagePosition进行排序 - 这是预期的行为。第二个排序字段(ImagePosition)将仅用作找到相同的CreatedDate的多行的tiebreaker。在你的情况下,所有的CreatedDate是不同的,所以ImagePosition排序从不使用(或需要)。

试着改变你的排序才能得到你想要的东西:

Order by [Image Position], [Created dt] 
+0

我希望没有任何排序的所有空白页面和剩余的原始页面进行排序。如果空白页的位置为3,即使在排序后,位置应该为3. –

+0

为了说明起见,查询最初为您工作的原因不是因为ImagePosition(因为它被忽略),而是因为CreatedDt发生按照您预期的顺序发生。这里使用的唯一标准是CreatedDt - 如果你想添加其他条件,你可以这样做 - 但是这不会让你的行失去排序,你也不能使用ORDER BY语句来做到这一点。如果你有一些硬逻辑,你可以模拟你想要的东西(排序行中未排序的行),但是到完成时它看起来相当麻烦。 – PinnyM

0

如果我理解正确的话,你需要:

order by [Created dt] DESC, [Image Position] 
+0

不,这根本不是问题 - 它也会带来不希望的结果。 – PinnyM

+0

是的,你是对的我没有不正确地发现它。我刚才看到“17:27:07.380”这一行在“17:27:07.380”之上。我的回答不正确 – vkamayiannis

+0

我希望所有的空白页面没有任何排序,剩余的原始页面进行排序。如果一个空白页的位置为3,即使排序后,该位置应该是3。 –