SQL查询连接表的前2列?

时间:2015-09-04 16:06:44

标签: sql join

我没有运气试图从连接表中获取顶部(x数字)的行。我想要前2个资源(按名称排序),在这种情况下应该是凯蒂和西蒙,不管我做了什么,我似乎无法做到正确。您可以在下面看到我已经评论过的内容 - 看起来它应该是什么样的(但不是)。我不能使用工会。有什么想法吗?

enter image description here

select distinct 

RTRESOURCE.RNAME as Resource,

RTTASK.TASK  as taskname, SUM(distinct SOTRAN.QTY2BILL) AS quantitytobill from SOTRAN AS SOTRAN  INNER JOIN RTTASK AS RTTASK ON sotran.taskid = rttask.taskid 

left outer JOIN RTRESOURCE AS RTRESOURCE ON rtresource.keyno=sotran.resid 

WHERE sotran.phantom<>'y'  and sotran.pgroup = 'L' and sotran.timesheet = 'y' and sotran.taskid >0 AND RTRESOURCE.KEYNO in ('193','159','200') AND ( SOTRAN.ADDDATE>='8/15/2015 12:00:00 AM' AND SOTRAN.ADDDATE<'9/3/2015 11:59:59 PM' ) 

//and RTRESOURCE.RNAME in ( select distinct top 2 RTRESOURCE.RNAME from  RTRESOURCE order by RTRESOURCE.RNAME)
//and ( select count(*) from RTRESOURCE RTRESOURCE2 where RTRESOURCE2.RNAME = RTRESOURCE.RNAME ) <= 2

GROUP BY RTRESOURCE.rname,RTTASK.task,RTTASK.taskid,RTTASK.mdsstring  ORDER BY Resource,taskname 

1 个答案:

答案 0 :(得分:0)

您应该提供架构。

但我们假设您的查询有效。您创建一个CTE。

WITH youQuery as (
   SELECT * 
   FROM < you  big join query>
), maxBill as (
   SELECT Resource, Max(quantitytobill) as Bill
   FROM yourQuery
)
SELECT top 2 *
FROM maxBill
ORDER BY Bill

如果你想要前2字母

WITH youQuery as (
   SELECT * 
   FROM < you  big join query>
), Names as (
   SELECT distinct Resource
   FROM yourQuery
   Order by Resource
)
SELECT top 2 *
FROM Names