2013-11-20 104 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。 –