2016-11-03 3 views
2

Microsoft SQL Server 2012를 사용하고 있는데 아래 쿼리가 있습니다. 모든 것을 올바르게 반환하지만 네 번째 행만 반환하는 방법을 알 수 없습니다.쿼리 결과의 네 번째 행 얻기

간단한 쿼리로 수행하는 방법을 알고 있지만이 복잡한 쿼리에서는 4 번째 행만 반환하는 방법을 알지 못합니다. MS SQL Server를 사용하고 있기 때문에 Limit/Offset을 사용할 수 없습니다. 네 번째 행만 인쇄하는 코드는 어디에서 어떻게 배치해야합니까? 나는 혼란 스럽다. 감사.

SELECT T.[First Name], 
T.[Last Name], 
T.[Middle Name], 
T.[Country Name], 
T.[Designation Name], 
Salary.Emp_Salary AS 'Current Salary' 
FROM 
(
SELECT 
    Emp_First_Name AS "First Name", 
    Emp_Last_Name AS "Last Name", 
    Emp_Middle_Name AS "Middle Name", 
    Country_Name AS "Country Name", 
    Desig_Name as "Designation Name", 
    MAX(Emp_Salary_Change_Year) AS "Time" 
    FROM Employee_Details 

    INNER JOIN Country ON Employee_Details.Emp_Country_Id = Country.Country_Id 
    INNER JOIN State ON Employee_Details.Emp_State_Id = State.State_Id 
    INNER JOIN Designation ON Employee_Details.Desig_Id = Designation.Desig_Id 
    INNER JOIN Salary ON Employee_Details.Emp_Id = Salary.Emp_Id 

    GROUP BY Emp_First_Name, Emp_Last_Name, 
    Emp_Middle_Name, Country_Name, Desig_Name) AS T 
    INNER JOIN Salary ON T.Time = Salary.Emp_Salary_Change_Year 
    ORDER BY [Current Salary]; 

답변

6

(1 개 행을 선택 만 4 rown 및 주문 내림차순을 선택 첫번째) 당신은 TOP이 방법을 사용할 수 있습니다

;WITH Cte AS 
(
    SELECT Col1, Col2, ..., 
     ROW_NUMBER() OVER (ORDER BY ...) AS RowNum 
    FROM Table 
) 
SELECT * 
FROM Cte 
WHERE RowNum = 4 
+0

이렇게하면됩니다. –

1

ROW_NUMBER()와 CTE를 사용

select TOP 1 from (
    SELECT TOP 4 T.[First Name], 
    T.[Last Name], 
    T.[Middle Name], 
    T.[Country Name], 
    T.[Designation Name], 
    Salary.Emp_Salary AS 'Current Salary' 
    FROM 
    (
    SELECT 
    ........ 
    ) AS T 
    INNER JOIN Salary ON T.Time = Salary.Emp_Salary_Change_Year 
    ORDER BY [Current Salary]) 
    ORDER BY [Current Salary] DESC 
2

당신 OFFSET/FETCH 키워드를 사용할 수도 있습니다.

SELECT * 
    FROM yourTable 
ORDER by yourSortColumn 
OFFSET 3 ROWS -- Skip Three rows. 
FETCH FIRST 1 ROW ONLY;