未选择SQL Min值

时间:2015-10-09 22:22:24

标签: sql-server sql-server-2008

我有一个带连接表的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

显然在这种情况下,我只需要第一行。

2 个答案:

答案 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;