English 中文(简体)
Returning row number on MS Access
原标题:

I have 4 tables, from which i select data with help of joins in select query...I want a serial no.(row number) per record as they are fetched. first fetched record should be 1, next 2 and so on...

In oracle the equiavelent in RowNum.

问题回答

The answer by Brettski is ASP flavored and would need a lot of editing.

SELECT DCOUNT("YourField","YourTable","YourField <=  " & [counter] & " ") 
  AS RowNumber,  
  YourField as counter FROM YourTable;  

Above is your basic syntax. You are likely to find this runs very slow. My typical solution is a bucket table with Autonumber field. That seems kludgy, but it gives me control and probably in this case it allows speed.

Using a sorted Make Table Query in Access, I use the following (wouldn t work if you look at the Query, as that would increment the number when you don t want it to)....

setRowNumber  resetting increment before running SQL
DoCmd.RunSQL ... , rowNumber([Any Field]) AS ROW, ...

 Increment Number: Used to create temporary sorted Table for export
Private ROWNUM As Long

 dummyField: must take an input to update in Query
Public Function rowNumber(ByVal dummyField As Variant, Optional ByVal incBy As Integer = 1) As Long
    ROWNUM = ROWNUM + incBy  increments before value is returned
    rowNumber = ROWNUM
End Function

Public Function setRowNumber(Optional ByVal setTo As Long = 0) As Long
    ROWNUM = setTo
    setRowNumber = ROWNUM
End Function

With the following table

SET NOCOUNT ON 

CREATE TABLE people 
( 
    firstName VARCHAR(32), 
    lastName VARCHAR(32) 
) 
GO 

INSERT people VALUES( Aaron ,  Bertrand ) 
INSERT people VALUES( Andy ,  Roddick ) 
INSERT people VALUES( Steve ,  Yzerman ) 
INSERT people VALUES( Steve ,  Vai ) 
INSERT people VALUES( Joe ,  Schmoe )

You can use a sub query to create the counting row:

SELECT 
    rank = COUNT(*), 
    a.firstName, 
    a.lastName 
FROM 
    people a  
    INNER JOIN people b 
    ON  
        a.lastname > b.lastname 
        OR 
        ( 
            a.lastName = b.lastName 
            AND 
            a.firstName >= b.firstName 
        ) 
GROUP BY 
    a.firstName, 
    a.lastName 
ORDER BY 
    rank

The problem with this method is that the count will be off if there are duplicates in your results set.

This article explains pretty well how to add a row counting column to your query.





相关问题
Handling no results for docmd.applyfilter

I have an Access app where I use search functionality. I have a TextBox and a Search Button on the form, and it does a wildcard search of whatever the user enters in the TextBox, and displays the ...

access query to filter and combine count

i have two access tables tableA num count 1 7 2 8 3 9 4 9 5 13 6 6 tableB num count 0 1 1 14 2 12 3 5 4 5 5 11 6 5 how can i create an access query that ...

How to show File Picker dialog in Access 2007?

I want to show a dialog where the user can pick a file, click OK, and then the path to the file will be saved in the database. I have just one problem, I can t figure out how tho show the dialog ...

MS Access: list macro from VBA

I have to deal with a few macros (not VBA) in an inherited Access application. In order to document them, I would like to print or list the actions in those macros, but I am very dissatisfied by ...

Returning row number on MS Access

I have 4 tables, from which i select data with help of joins in select query...I want a serial no.(row number) per record as they are fetched. first fetched record should be 1, next 2 and so on... In ...

热门标签