0

我在 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

4 回答 4

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

希望我正确理解了您的问题。

在此处输入图像描述

于 2012-04-04T00:55:52.650 回答
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
于 2012-04-03T23:58:45.610 回答
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 
于 2012-04-03T23:59:04.847 回答
-1

您只需使用“UNION ALL”将两个过滤器组合到一个表中

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

联合所有

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

于 2012-04-04T05:39:57.213 回答