我在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...
答案 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
希望我能正确理解你的问题。
答案 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)