2012-04-03 60 views
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

这个工作的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

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 
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 
-1

你只需要你的两个过滤器组合成使用 'UNION ALL'

一个表(SELECT TOP 400 firstid,firstpoints FROM t_list
ORDER BY firstpoints DESC)

UNION ALL

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