我有一个带连接表的select语句,我试图选择连接表的第一行。
例如,dbo.Projects
有许多dbo.Buffers
。
我的查询是:
SELECT PM.PROJECTID, PM.PROJECTNAME, BU.PERCENTPENWREALIGNED
FROM dbo.PROJECTMGRVIEW AS PM
JOIN dbo.S2M_BUFFER AS BU ON BU.PROJECTID = ( SELECT DISTINCT MIN(TASKUNIQUEID) FROM dbo.S2M_BUFFER WHERE PROJECTID = PM.PROJECTID )
WHERE PM.PROJECT_TYPE = 8 AND PM.CATEGORY = 'Engineering' ANd PM.PROJECTID = 244;
我的结果集有很多行:
PROJECTID | PROJECTNAME | PERCENTPENWREALIGNED
244 | PROJECT A | 100
244 | PROJECT A | 0
244 | PROJECT A | 0
244 | PROJECT A | 0
244 | PROJECT A | 0
244 | PROJECT A | 0
244 | PROJECT A | 0
显然在这种情况下,我只需要第一行。
答案 0 :(得分:1)
你的联接没有任何意义,你不能使用子查询来做,但我猜你想要这样的东西:
SELECT PM.PROJECTID, PM.PROJECTNAME, BU.PERCENTPENWREALIGNED
FROM dbo.PROJECTMGRVIEW AS PM
CROSS APPLY (
select top 1 PERCENTPENWREALIGNED
from dbo.S2M_BUFFER BU
where BU.PROJECTID = PM.PROJECTID
order by TASKUNIQUEID ASC
) BU
WHERE PM.PROJECT_TYPE = 8 AND PM.CATEGORY = 'Engineering' AND PM.PROJECTID = 244;
这将使用PROJECTMGRVIEW
将S2M_BUFFER中具有最小TASKUNIQUEID的行加入答案 1 :(得分:0)
我同意您的加入声明因PROJECTID和TASKUNIQUEID之间的循环引用而存在缺陷。
我认为这可能是你想要做的更多:
SELECT PM.PROJECTID, PM.PROJECTNAME, BU.PERCENTPENWREALIGNED
FROM dbo.PROJECTMGRVIEW AS PM
JOIN dbo.S2M_BUFFER AS BU ON BU.TASKUNIQUEID =
( SELECT DISTINCT MIN(TASKUNIQUEID) FROM dbo.S2M_BUFFER WHERE PROJECTID = PM.PROJECTID )
WHERE PM.PROJECT_TYPE = 8 AND PM.CATEGORY = 'Engineering' ANd PM.PROJECTID = 244;