SQL MIN()返回多个值?

时间:2012-11-09 09:50:32

标签: sql sql-server min

我正在使用SQL Server 2005,使用Web Developer 2010查询,而min函数似乎返回了多个值(对于返回的每个ID,请参见下文)。理想情况下,我希望只为每个ID返回一个。

SELECT     Production.WorksOrderOperations.WorksOrderNumber,
           MIN(Production.WorksOrderOperations.OperationNumber) AS Expr1, 
           Production.Resources.ResourceCode,
           Production.Resources.ResourceDescription,
           Production.WorksOrderExcel_ExcelExport_View.PartNumber,
           Production.WorksOrderOperations.PlannedQuantity,
           Production.WorksOrderOperations.PlannedSetTime, 
           Production.WorksOrderOperations.PlannedRunTime
FROM       Production.WorksOrderOperations
INNER JOIN Production.Resources
           ON Production.WorksOrderOperations.ResourceID = Production.Resources.ResourceID
INNER JOIN Production.WorksOrderExcel_ExcelExport_View
           ON Production.WorksOrderOperations.WorksOrderNumber = Production.WorksOrderExcel_ExcelExport_View.WorksOrderNumber
WHERE      Production.WorksOrderOperations.WorksOrderNumber IN
             ( SELECT   WorksOrderNumber
               FROM     Production.WorksOrderExcel_ExcelExport_View AS WorksOrderExcel_ExcelExport_View_1
               WHERE    (WorksOrderSuffixStatus = 'Proposed'))
           AND Production.Resources.ResourceCode IN ('1303', '1604')
GROUP BY   Production.WorksOrderOperations.WorksOrderNumber,
           Production.Resources.ResourceCode,
           Production.Resources.ResourceDescription,
           Production.WorksOrderExcel_ExcelExport_View.PartNumber,
           Production.WorksOrderOperations.PlannedQuantity,
           Production.WorksOrderOperations.PlannedSetTime,
           Production.WorksOrderOperations.PlannedRunTime

如果你能理解它,我会从多个表中选择某些列,其中WorksOrderNumber也包含在子查询中,以及许多其他条件。

结果集看起来有点像这样,模糊了无关数据。

http://i.stack.imgur.com/5UFIp.png(不允许我嵌入图片)。

突出显示的行不应该存在,我无法明确地过滤它们,因为这个结果集将每天更新,并且可能会发生不同的记录。

我尝试过将OperationNumber转换为许多其他数据类型,varchar类型返回'100'而不是'30'。也尝试搜索搜索引擎,似乎没有人有同样的问题。

我没有构建表格(它们被严格规范化),并且不可能对它们进行重组。

任何想法都表示赞赏,非常感谢。

1 个答案:

答案 0 :(得分:0)

MIN函数返回组内的最小值。 如果您想要每个ID的最小值,您只需要ID即可获得组。 我假设您通过“ID”指的是Production.WorksOrderOperations.WorksOrderNumber。

您可以在SQL中将其添加为“表格”:

(SELECT Production.WorksOrderOperations.WorksOrderNumber,
       MIN(Production.WorksOrderOperations.OperationNumber) 
  FROM Production.WorksOrderOperations
 GROUP BY  Production.WorksOrderOperations.WorksOrderNumber)