如何执行这样的查询?

时间:2012-04-03 23:44:47

标签: sql sql-server-2008

我在SQL Server 2008表t_list中有以下列:
firstid, firstpoints, secondid, secondpoints

我想在SQL查询中选择所有这些列,但是以特定方式排序。

我想选择这些列的前400个,firstpoints仅针对firstid列进行排序,secondpoints仅针对一个查询中的secondid列进行排序,例如:

SELECT TOP 400 firstid, firstpoints 
FROM t_list 
ORDER BY firstpoints desc 

select top 400 secondid, secondpoints 
FROM t_list 
ORDER BY secondpoints desc

如何将上述两个查询放入一个查询中,返回输出

firstid, firstpoints, secondid, secondpoints

1. firstidresult, firstpointresult, secondidresult, secondpointsresult
2. etc...

4 个答案:

答案 0 :(得分:4)

这适用于MS SQL Server

Select t1.FirstID, t1.FirstPoints, t2.SecondID, t2.SecondPoints
From (Select Top 400 row_number() Over (Order By FirstPoints desc) As r, FirstID, FirstPoints From t_list) As t1
    Join (Select Top 400 row_number() Over (Order By SecondPoints desc) As r, SecondID, SecondPoints From t_list) as t2 on t1.r = t2.r

希望我能正确理解你的问题。

enter image description here

答案 1 :(得分:0)

    SELECT *
FROM (
    SELECT TOP 400 FirstId
        ,FirstPoints
    FROM t_list
    ORDER BY FirstPoints
    ) f

UNION

SELECT *
FROM (
    SELECT TOP 400 SecondId
        ,SecondPoints
    FROM t_list
    ORDER BY SecondPoints
    ) s

答案 2 :(得分:0)

WITH CTE1 AS 
(SELECT 1 as [Order],
    firstid, 
    firstpoints,
    Row_Number() OVER (ORDER BY firstpoints desc ) as RowNum
FROM t_list 
),
CTE2 AS 
(SELECT 
    2,
    secondid, 
    secondpoints,
    Row_Number() OVER (ORDER BY secondpoints) as RowNum
FROM t_list 
)
SELECT [Order],
    firstid as Id, 
    firstpoints  as Points
FROM CTE1
WHERE RowNum <= 400
UNION 
SELECT [Order],
     secondid, 
     secondpoints 
FROM CTE2
WHERE RowNum <= 400
ORDER BY [Order], RowNum 

答案 3 :(得分:-1)

您只需要使用'UNION ALL'

将两个过滤器合并到一个表中

(SELECT TOP 400 firstid,firstpoints FROM t_list
ORDER BY firstpoints desc)

UNION ALL

(选择前400名第二名,第二名 FROM t_list
ORDER BY secondpoints desc)