Ang*_*nga 3 sql-server sql-server-2008-r2 sql-server-2012
我有一个查询,可以获取 3 本书(ABC1、ABC2、ABC3)及其详细信息。我需要它们按特定顺序进行旋转,因此我有一个相同的行号列。人们不读/一些/所有的书。
桌子:
StudentID|||BookName|||RowNumber
1000|||ABC1|||27
1000|||ABC2|||31
1000|||ABC3|||28
1005|||ABC2|||28
1005|||ABC3|||20
1005|||ABC1|||25
1006|||ABC1|||12
1006|||ABC2|||14
1006|||ABC3|||15
Run Code Online (Sandbox Code Playgroud)
所以我的数据会像上面那样。我需要为每个学生,ABC1,ABC2,ABC3 应该按顺序和 Rownumber 按降序更新。所以对于学生 1000:
ABC1||27,ABC2||28,ABC3||31
Run Code Online (Sandbox Code Playgroud)
对于学生 1005:
ABC1||20,ABC2||25,ABC3||28
Run Code Online (Sandbox Code Playgroud)
对于 1006:没有变化(它们的顺序已经正确)。
我将上述所有数据放入一个临时表中,并将主数据放入另一个临时表中。我正在尝试编写更新语句,但没有按预期工作。我需要帮助。
CREATE TABLE #t(StudentID INT, BookName VARCHAR(10), RowNumber INT);
INSERT #t(StudentID,BookName,RowNumber) VALUES
(1000,'ABC1',27), (1000,'ABC2',31), (1000,'ABC3',28),
(1005,'ABC2',28), (1005,'ABC3',20), (1005,'ABC1',25),
(1006,'ABC1',12), (1006,'ABC2',14), (1006,'ABC3',15);
;WITH x AS
(
SELECT StudentID, BookName, RowNumber,
rn1 = ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY BookName),
rn2 = ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY RowNumber)
FROM #t
)
SELECT x.StudentID, x.BookName, y.RowNumber
FROM x INNER JOIN x AS y
ON x.StudentID = y.StudentID
AND x.rn1 = y.rn2
ORDER BY x.StudentID, x.rn1;
GO
DROP TABLE #t;
Run Code Online (Sandbox Code Playgroud)
结果:
CREATE TABLE #t(StudentID INT, BookName VARCHAR(10), RowNumber INT);
INSERT #t(StudentID,BookName,RowNumber) VALUES
(1000,'ABC1',27), (1000,'ABC2',31), (1000,'ABC3',28),
(1005,'ABC2',28), (1005,'ABC3',20), (1005,'ABC1',25),
(1006,'ABC1',12), (1006,'ABC2',14), (1006,'ABC3',15);
;WITH x AS
(
SELECT StudentID, BookName, RowNumber,
rn1 = ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY BookName),
rn2 = ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY RowNumber)
FROM #t
)
SELECT x.StudentID, x.BookName, y.RowNumber
FROM x INNER JOIN x AS y
ON x.StudentID = y.StudentID
AND x.rn1 = y.rn2
ORDER BY x.StudentID, x.rn1;
GO
DROP TABLE #t;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |