2012-09-22 88 views
0

我在Access 2010中,正在嘗試爲以特定方式排序的查詢創建排名或行號字段。我試過Rank: DCount("id","[Query1]","id <= " & [id]),但它忽略了我的查詢排序,因爲訂單不是作爲ID主鍵。SQL:排序查詢

+1

如何發佈數據的一小部分 - 只要剪切和粘貼,不要過分擔心佈局 - 以及你想要的順序上的一些注意事項? – Fionnuala

回答

1

我已經看到了你的排序邏輯,並且似乎我設法通過創建一個附加查詢(Temp)和一個包含所有排序函數子產品並列的列來設計排名。此查詢的代碼應該是這樣的:

SELECT Table1.Code1, 
    Len(Mid([Code1] & "",1,IIf(InStr([Code1] & "","*")>0,InStr([Code1] & "","*")-1,Len([Table1].[Code1] & "")))) 
    & Mid([Code1] & "",1,IIf(InStr([Code1] & "","*")>0,InStr([Code1] & "","*")-1,Len([Table1].[Code1] & ""))) & 
    Val(Mid([Code1] & "",InStr([Code1] & "","*")+1)) & 
    CStr(Val(Mid([Code1] & "",InStr([Code1] & "","*")+1))) AS OrderCode1 
FROM Table1 
ORDER BY Len(Mid([Code1] & "",1,IIf(InStr([Code1] & "","*")>0,InStr([Code1] & "","*")-1,Len([Table1].[Code1] & "")))), 
    Mid([Code1] & "",1,IIf(InStr([Code1] & "","*")>0,InStr([Code1] & "","*")-1,Len([Table1].[Code1] & ""))), 
    Val(Mid([Code1] & "",InStr([Code1] & "","*")+1)), 
    CStr(Val(Mid([Code1] & "",InStr([Code1] & "","*")+1))), Table1.Code1; 

後,如果您創建了這額外的一個查詢,並使用DCount功能上的WHERE參數「OrderCode1」列,你應該得到一個順序排名。就像這樣:

SELECT Temp.Code1, DCount("Code1","[Temp]","OrderCode1 <= '" & [OrderCode1] & "'") AS Rank 
FROM Temp; 

如果你仍然需要一個解決方案,你可以檢查它是否工作!

+0

我的查詢有一個複雜的字符串排序。 [REF](http://stackoverflow.com/questions/12494240/sql-sort-and-filter)。我嘗試了以下'Rank:DCount(「Id」,「[qryMaterialSortLast]」,「Sort1 <=」&[Sort1]&「and Sort2 <='」&[Sort2]&「'and Sort3 <=」&[ Sort3])',但沒有爲一些工作。 – Rick

+0

我曾試圖做類似排序的事情,但因爲它包含一個字符串而在第二個排序級別上很難。使用你的帖子,我想出了以下內容,對於我的字段進行了很好的排序,並且不需要在另一個查詢中使用DCount函數: 'OrderCode1:Len(Mid([Code1]&「」, InStr([Code1]&「」,「*」)> 0,InStr([Code1]&「」,「*」) - 1,Len([Code1]&「」))))&Mid([ Code1]&「」,1,IIf(InStr([Code1]&「」,「*」)> 0,InStr([Code1]&「」,「*」) - 1,Len([Code1]&「 ))&Len(CStr(Val(Mid([Code1]&「」,InStr([Code1]&「」,「*」)+ 1))))&CStr(Val(Mid([Code1]&「 「,InStr([Code1]&」「,」*「)+ 1)))' – Rick

+0

我剛加了len()後面的星號。這樣它更好地排序 謝謝! – Rick

-1

希望這有助於

SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNo, OrderID FROM Orders