1

ROW_NUMBER()特定の行番号を取得するために句を使用しようとしました

このクエリを実行すると

SELECT 
student.Aca_num,id_num,student.name,dob,pic,class.name,
student.tell,student.mobile1,mobile2,student.Email,nach.name,dist,notes
FROM
student,[user],users_classes,class,nach
WHERE
((class.ID)=student.class)
and
((nach.ID)=student.nach)
and
((student.class)=users_classes.Class_ID)
AND
((users_classes.[User_ID])=[user].ID)
AND
(([user].ID)=3)

クエリの結果

今、私Row Number()はこのクエリで使用して、行番号を指定して1行だけを取得する必要があります。

私はRow Number()このように使用します

SELECT * FROM
    (SELECT ROW_NUMBER() OVER (ORDER BY name) AS Row, * FROM Student) AS EMP
WHERE Row = 3

このクエリthirdは、学生テーブルの行を返します

Row Number()ただし、(student,class) などの複数のテーブルで使用するとエラーが発生します

SELECT * FROM
    (SELECT ROW_NUMBER() OVER (ORDER BY student.name) AS Row, * FROM Student,Class) AS EMP
WHERE Row = 3

それは私にこのエラーを与えます

メッセージ 8156、レベル 16、状態 1、行 10 列「名前」が「EMP」に対して複数回指定されました。

Row Number()複数のテーブルで句を使用して特定の行番号を返すにはどうすればよいですか|

前もって感謝します

よろしく...

4

2 に答える 2

2

それは関係ありませんROW_NUMBER()

Studentと表の両方に、Classという列がありますName。サブクエリを作成する場合、結果セット内の列名は異なる必要があります。

そのため*、(両方の名前が必要な場合) 1 つのエイリアスを含めて、列に明示的に名前を付けないでください。

SELECT * FROM
    (SELECT ROW_NUMBER() OVER (ORDER BY s.name) AS Row, s.Name as StudentName,c.Name as ClassName FROM Student s,Class c) AS EMP
WHERE Row = 3

もちろん、現時点では、2 つのテーブル間でデカルト結合を実行しています。何らかの方法でテーブルを結合したい可能性が高くなります。

... FROM Student s INNER JOIN Class c on s.class = c.id ...
于 2013-01-09T08:03:09.150 に答える
1

これがお役に立てば幸いです。

;WITH Emp AS
(
            -- Avoid using reserved words like [Row] (changed to nRow)
    SELECT   ROW_NUMBER() OVER (ORDER BY student.name) AS nRow 
            -- You cannot use * because your tables have columns with matching names
            -- Make sure that the columns you require are unique in their name or are aliased
            -- to be unique
            ,S.Col AS Foo
            ,C.Col AS Bar 
    FROM Student    S
    --  Your FROM expression [FROM Student,Class] will result effectively in a CROSS JOIN
    --  Clarify your join condition if you do not want a cartesian product
    JOIN Class      C ON S.Col = C.Col
)
SELECT *
FROM Emp
WHERE nRow = 3
于 2013-01-09T08:19:12.923 に答える